记录编号 |
602381 |
评测结果 |
AAAAAAAAAA |
题目名称 |
4167.镜牢 |
最终得分 |
100 |
用户昵称 |
二乾五 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.554 s |
提交时间 |
2025-07-03 20:31:11 |
内存使用 |
5.84 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define cl(a) memset(a,0,sizeof a)
#define copy(a,b) copy(begin(a),end(a),begin(b))
#define ld long double
#define dot(x) fixed<<setprecision(x)
#define foru(a,b,c) for(ll a=b;a<=c;a++)
ll n,a[100005],b[100005],c[100005],x[100005],ans;
void deal(ll k,ll depth){
x[k<<1]=x[k]^a[depth];
x[k<<1|1]=x[k]^b[depth];
if(depth==n){
ans=max(ans,max(x[k<<1],x[k<<1|1]));
return;
}
deal(k<<1,depth+1);
deal(k<<1|1,depth+1);
}
int main(){
#ifndef ONLINE_JUDGE
freopen("mirror.in" ,"r",stdin );
freopen("mirror.out","w",stdout);
#endif
cin>>n;
foru(i,1,n){
cin>>a[i];
ans^=a[i];
}
foru(i,1,n) cin>>b[i];
foru(i,1,n){
cin>>c[i];
x[i]=a[i]^b[i];
}
for(ll i=59;i>=0;i--){
ll t=n;
while(t&&!((x[t]>>i)&1)){
t--;
}
if(!t)continue;
if(((ans>>i)&1)^c[t])ans^=x[t];
for(ll j=1;j<=n;j++){
if((x[j]>>i)&1)x[j]^=x[t];
}
}
cout<<ans;
return 0;
}