🌏博客主页:PH_modest的博客主页
🚩当前专栏:cf闯关练习
💌其他专栏:
🔴每日一题
🟡 C++跬步积累
🟢 C语言跬步积累
🌈座右铭:广积粮,缓称王!
一.关卡1(D. Epic Transformation)
👉传送门👈
1.Tutorial
- 统计每个数出现的次数,然后找到出现的最大次数maxx
- 然后通过模拟得出以下结论:(
真的就是慢慢模拟找的)
- 如果maxx大于n/2,那么就说明这个数(x)可以和其他数全部消去,最后剩下的数一定是x,通过观察可以得出最后剩余的值满足以下结论:n-2*(n-maxx);
-如果maxx小于等于n/2,那么就需要分奇偶讨论,因为如果是偶数,最后剩余的两个相异的数能够抵消,如果是奇数就不可以;
(1)偶数情况:只要我们优先将次数多的先结合,最后一定不会剩余数字,所以直接输出0,至于为什么大家可以下去模拟一下;(我也不会证明)
(2)奇数情况:奇数情况和偶数差不多,只不过最后一个数没办法消除,所以直接输出1。
2.Solution
//https://codeforces.com/problemset/problem/1506/D
//结果和数量最多的那个数有关
//
#include<bits/stdc++.h>
#define int long long
using namespace std;
void solve()
{
int n;
cin>>n;
map<int,int>mp;
int maxx=0;
for