D. XOR Permutations
注意
多次输入输出不要忘了初始化
注意分析
代码
点击查看代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<cctype>
using namespace std;
#define X first
#define Y second
typedef pair<int,int> pii;
typedef long long LL;
typedef struct ss{
int cnt1,cnt0;
string s;
}ss;
ss s[3];
const char nl = '\n';
const int N = 1e6+10;
const int M = 2e5+10;
bool cmp(ss a,ss b){
return a.cnt1 > b.cnt1;
}
void solve(){
int t;
cin >> t;
while(t -- ){
cin >> s[0].s >> s[1].s >> s[2].s;
s[0].cnt1 = 0;
s[1].cnt1 = 0;
s[2].cnt1 = 0; //记得初始化
for(int i = 0; i <= 9; i ++ ){
if(s[0].s[i] == '1')s[0].cnt1 ++;
if(s[1].s[i] == '1')s[1].cnt1 ++;
if(s[2].s[i] == '1')s[2].cnt1 ++;
}
s[0].cnt0 = 10 - s[0].cnt1;
s[1].cnt0 = 10 - s[1].cnt1;
s[2].cnt0 = 10 - s[2].cnt1;
//结果取“1”的组合有“100”和"111"两种
//如果希望“1”的个数尽可能地多,我们可以优先取“100”组合
for(int i = 1; i <= 10; i ++ ){
sort(s,s+3,cmp); //每次都排序1数量最多的放前面
if(s[0].cnt1 > 0 && s[1].cnt0 > 0 && s[2].cnt0 > 0){ //优先“100”组合
s[0].cnt1 --;
s[1].cnt0 --;
s[2].cnt0 --;
cout << "1";
}
else if(s[0].cnt1 > 0 && s[1].cnt1 > 0 && s[2].cnt1 > 0){ //其次"111"组合
s[0].cnt1 --;
s[1].cnt1 --;
s[2].cnt1 --;
cout << "1";
}
else cout << "0";
}
cout << nl;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
solve();
}