D. Epic Transformation
题目 :https://codeforces.com/problemset/problem/1506/D
题目大意:让你输入一个长度为n的数组,将数组中的元素两两匹配将不相等的去掉
例如:
For example, if n=6 and a=[1,6,1,1,4,4], then you can perform the following sequence of operations:
-
select i=1,j=5 The array a becomes equal to [6,1,1,4][6,1,1,4];
-
select i=1,j=2 The array a becomes equal to [1,4][1,4].
这时输出结果为 0;
这时我们要考虑如何消掉不相同的,到最后又会剩下那些数。
**当数中有我们无法消除的数时 ,这个数一定是重复出现次数最多的数(前提n为偶数)求出max1为最大数 然后用x=max1-(n-max1) **
所以我们需要求出重复数字出现的最多次数。
完整代码:
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
const int N=1000010;
int n,m;
int a[N];
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);//排序 然后求最大次数
int max1=1;
m=1;
for( i=0;i<n-1;i++)
{
if(a[i]==a[i+1]) m++;
if(a[i]!=a[i+1]) m=1;
max1=max(max1,m);
}
if(n%2==1){//n为奇数时 输出的数肯定>=1
int x=2*max1-n;
if(x<=0 || max1==1){
printf("1\n");
continue;
}
printf("%d\n",x);
}
else{
int x=2*max1-n;
if(x<=0 || max1==1){
printf("0\n");
continue;
}
printf("%d\n",x);
}
}
return 0;
}