对于这道题真是心痛,赛时我的想法是只有奇数个的最大的数字可以为1,但是其实不对,因为最大的数字可以先干掉次大的,所以这是不对的,第一个是我赛时的代码,思路不对,所以通过96.3%

#include <bits/stdc++.h>
using namespace std;
signed main(){
    long long t;
    cin>>t;
    
    
    while (t--){
        long long n,x;
        cin>>n;
        vector<long long>a;
        vector<long long>b;
        for (int i=0;i<n;i++){
            cin>>x;
            a.push_back(x);
            b.push_back(x);//思路:弄个一样的数组排序,然后找里面出现奇数次的最大的数字,这样可以完美解决
        }
        sort(b.begin(), b.end(), greater<long long>());//从大到小排列更方便
        long long y=n;
        string s;
        while(y--){
            s+='0';
        }
        long long winner=-19;
        long long i=0;
        while(i<n){
            long long j=i;
            while(j<n&&b[j]==b[i]){
                j++;//记录第i个数字出现的次数
            }
            long long count=j-i;//次数
            
            if (count%2!=0){
                winner=b[i];
                break;//直接停止循环
            }
           
            i=j;//检查到第几个数字了,疑问:会不会第几个数字出问题,纸质简单计算一下。
        }//无误
        if (winner!=-19) {
            for (int i=0;i<n;i++) {
                if(a[i]==winner){
                    s[i]='1';
                }
            }
        }
        cout<<s;//注意换行
        cout<<'\n';
        s.clear();
    }
    
    return 0;
}

接下来是赛后,思路其实已经将明白了,就是如果最大的数字出现的次数是奇数,那么只有他为1,如果出现的次数是偶数,那么其他都可以为1,除了最大的那个数字 不过学到了一个s.assign(n,'0');//开销更小,值得提一下,这个是把字符串定义在外面,在循环里面更改,比直接在循环里面定义开销更小,接下来是代码

#include <bits/stdc++.h>
using namespace std;
signed main(){
    long long t;
    cin>>t;
    string s;
    while (t--){
        long long max=0,cont=0;
        long long n,x;
        cin>>n;
        vector<long long>a;
        for (int i=0;i<n;i++){
            cin>>x;
            a.push_back(x);
            if(x>max){
                max=x;
                cont=1;
            }else if(x==max){
                cont++;
            }
        }
        //string s(n,'0');
        s.assign(n,'0');//开销更小
        long long i=0;
        while(i<n){
            if(a[i]==max&&cont%2!=0){
                s[i]='1';
            }else if(cont%2==0&&a[i]!=max){
                s[i]='1';
            }
            i++;
        }
        cout<<s;//注意换行
        cout<<'\n';
    }
    
    return 0;
}