题目描述及输入输出如图所示
核心思路
如果最大数个数为奇数,则在消除过程中,所有比max小的数都会被删除,最后max在两两消除,留下任意一个最大数,此时所有最大数都有可能获胜。
而如果最大数个数为偶数,则在消除时,所有最大数之间都会两两消除,剩下任意数,都可以通过用最大数消掉其他数来获胜,即当最大数为偶数时,除了最大数,其他任意数都能获胜。
代码如下
```#include<bits/stdc++.h>
using namespace std;
//#define int long long
int main() {
int T;
cin >> T;
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
for(int i=0;i<T;i++) {
int n;
cin >> n;
int mx=-1;
vector<int> a(200005);
map<int,int> cnt;
for (int j = 0; j < n; j++) {
cin >> a[j];
if(a[j]>mx)
mx=a[j];
cnt[a[j]]++;
}
//cout<<cnt[mx]<<" "<<mx<<endl;
for(int k=0;k<n;k++)
{
if(a[k]!=mx&&cnt[mx]%2==0)
cout<<"1";
else
if(a[k]==mx&&cnt[mx]%2)
cout<<"1";
else
cout<<"0";
}
cout<<'\n';
}
return 0;
}

京公网安备 11010502036488号