You are given an array aa of length nn consisting of integers. You can apply the following operation, consisting of several steps, on the array aa zero or more times:
- you select two different numbers in the array aiai and ajaj;
- you remove ii-th and jj-th elements from the array.
For example, if n=6n=6 and a=[1,6,1,1,4,4]a=[1,6,1,1,4,4], then you can perform the following sequence of operations:
- select i=1,j=5i=1,j=5. The array aa becomes equal to [6,1,1,4][6,1,1,4];
- select i=1,j=2i=1,j=2. The array aa becomes equal to [1,4][1,4].
What can be the minimum size of the array after applying some sequence of operations to it?
Input
The first line contains a single integer tt (1≤t≤1041≤t≤104). Then tt test cases follow.
The first line of each test case contains a single integer nn (1≤n≤2⋅1051≤n≤2⋅105) is length of the array aa.
The second line of each test case contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤1091≤ai≤109).
It is guaranteed that the sum of nn over all test cases does not exceed 2⋅1052⋅105.
Output
For each test case, output the minimum possible size of the array after applying some sequence of operations to it.
Example
input
5 6 1 6 1 1 4 4 2 1 2 2 1 1 5 4 5 4 5 4 6 2 3 2 1 3 1output
0 0 2 1 0
一个经典的,任意挑两个数消除,最后最少能剩下多少个数的问题。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i = a;i <= b;++i)
using namespace std;
const int N = 2e5+10;
int a[N];
map<int,int> mp;
void solve(){
mp.clear();
int n; cin >> n;
rep(i,1,n) cin >> a[i],mp[a[i]]++;
int maxn = -1;
for(auto x: mp) maxn = max(maxn,x.second);
if(maxn <= n/2){
if(n%2) cout << 1 << endl;
else cout << 0 << endl;
}else{
cout << maxn - (n - maxn)<< endl;
}
}
int main(){
int t; cin>>t;
while(t--) solve();
return 0;
}