这题我们要尽量让相同数值的数的数量变成偶数

可以发现,假设某个数值xx的数量为ii,就可以让i1i-1xx变成x+1x+1

所以我们让所有数尽量往大的变,用map记录每个数值的个数,让后保留2个,其他的都+1。

AC Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<bits/stdc++.h>
using namespace std;
int t;
map<int,int> mp;
int n,a[1000010];
int main(){
cin>>t;
while(t--){
cin>>n;
if(n%2!=0){// 不能平分
puts("No");
continue;
}
for(int i=1;i<=n;i++){
cin>>a[i];
mp[a[i]]++;//统计个数
}
for(auto [i,j]:mp){
if(j>2) mp[i+1]+=j-2,mp[i]=2;//只留两个,其他的全部+1
}
bool flag=true;
for(auto [i,j]:mp){
if(j%2!=0){
flag=false;
break;
}
}
if(flag) puts("Yes");
else puts("No");
mp.clear();//多组数据要清空
}
return 0;
}