CF1721D
提供一个实现较为简洁的两
思路
按位贪心。
若要某一位上答案为
若这一位答案能取
也就是说,将某一位上确定取
实现
思路很简单,但是代码一看就很细节。
这时候,我们拿出了万能的
将
判断能否取
若能取
若取
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+7,V=30;
int a[N],b[N];
int main()
{
ios::sync_with_stdio(0),cin.tie(0);
int T,n,i,j,ans;
for(cin>>T;T--;)
{
cin>>n;
for(i=1;i<=n;++i) cin>>a[i];
for(i=1;i<=n;++i) cin>>b[i];
sort(a+1,a+n+1,less<int>());
sort(b+1,b+n+1,greater<int>());
ans=0;
for(i=V;~i;--i)
{
for(j=1;j<=n;++j)
if((a[j]&(1<<i))==(b[j]&(1<<i)))
break;
if(j>n) ans|=1<<i;//贡献给答案
else
{
for(j=1;j<=n;++j)//推平成1
a[j]|=(1<<i),b[j]|=(1<<i);
sort(a+1,a+n+1,less<int>());//重新排序,抹去这一位上原有对集合划分的影响
sort(b+1,b+n+1,greater<int>());
}
}
cout<<ans<<'\n';
}
return 0;
}