題目鏈接
題意:
給你三個十位的二進制數字,你可以任意改變他們的“0”和“1”的位置,求這三個二進制數字異或的最大值。
思路:
如果三個二進制數字中1的數量小於10,那麼直接輸出所有1然後補零,如果大於10,已知兩個1可以相互抵消變爲0,那麼可以先抵消掉能夠抵消的1,然後剩餘的1再排列(思路有點抽象,具體還是要看代碼)。
代碼:
#include <bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int N=2e5+7;
int cmp(int a,int b)
{
return a>b;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int a[3],num=0;
memset(a,0,sizeof a);
for(int i=0;i<3;i++)
{
for(int j=0;j<10;j++)
{
char c;
cin>>c;
if(c=='1')
{
a[i]++;
num++;
}
}
}
sort(a,a+3,cmp);
if(num>10)
{
while(a[2]>0&&num>10)
{
a[1]--;a[2]--;num-=2;
}
if(num>10)
{
for(int i=0;i<10;i++)
{
if(i<20-num)
cout<<1;
else
cout<<0;
}
cout<<endl;
}
else
{
for(int i=0;i<10;i++)
{
if(i<num)
cout<<1;
else
cout<<0;
}
cout<<endl;
}
}
else
{
for(int i=0;i<10;i++)
{
if(i<num)
cout<<1;
else
cout<<0;
}
cout<<endl;
}
}
return 0;
}