D. Binary Literature

学习自该博主

https://blog.csdn.net/weixin_44178736/article/details/115916918?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

对于一个2*n的串,不是1的数量大于等于0,就是0的数量小于1

给了三个串,那么一定有两个串 0或者1大于等于n

然后找到那两个串,相同输出,不同输出不同的。

结尾,不够的补上0

#include<bits/stdc++.h>
#define int long long
using namespace std;
string s[3];
int c[3],cc[3];
int n;
void print(int x,int y,char f){
    int i=0,j=0;
    string ans;
    while(i<n*2&&j<n*2){
        if(s[x][i]!=f)ans+=s[x][i++];
        else if(s[y][j]!=f)ans+=s[y][j++];
        else{
            ans+=f;
            i++,j++;
        }
    }
    while(i<n*2){
        ans+=s[x][i++];
    }
    while(j<n*2){
        ans+=s[y][j++];
    }
    cout<<ans<<endl;
}
void solve(){
    cin>>n;
    for(int i=0;i<3;i++){
        cin>>s[i];
        c[i]=cc[i]=0;
        for(int j=0;j<n*2;j++){
            if(s[i][j]=='0')c[i]++;
            else cc[i]++;
        }
    }
    for(int i=0;i<3;i++){
        for(int j=i+1;j<3;j++){
            if(c[i]>=n&&c[j]>=n){//0
                print(i,j,'0');
                return ;
            }
            if(cc[i]>=n&&cc[j]>=n){//1
                print(i,j,'1');
                return ;
            }
        }
    }
}
signed main(){
    ios::sync_with_stdio(0);
    int T;cin>>T;
    while(T--){
        solve();
    }
    return 0;
}
原文地址:https://www.cnblogs.com/PdrEam/p/14700583.html