- Quiz
- AC
- 解法
- editorialではbitごとに決まると書いてあるが、値域が狭いので全探索したらACした
- 先頭2つを全探索し、条件を満たし続ける限りi=2以降も決めていく。ビットORで次の候補は複数ありうるが、ビットANDは厳しい条件なので大抵はすぐに枝刈りされると考えた
- 嘘解法の可能性はある
- 学び
- ビット演算はイコールより優先度が低いので括弧を使うこと
- 中国のblog
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
ll N;
cin>>N;
VI A(N-1);
rep(i, N-1) cin >> A[i];
VI B(N-1);
rep(i, N-1) cin >> B[i];
if(N==2){
rep(a,4){
rep(b,4){
bool f = (a|b)==A[0];
bool g = (a&b)==B[0];
if(f&&g){
p("YES");
p2(a,b);return 0;
}
}
}
}
VI C(N);
rep(a,4){
rep(b,4){
C[0]=a;
C[1]=b;
if(((C[0]|C[1])==A[0]) && ((C[0]&C[1])==B[0])){
}else{
continue;
}
FOR(i,2,N){
bool found=false;
rep(c,4){
if(((C[i-1]|c)==A[i-1]) && ((C[i-1]&c)==B[i-1])){
found=true;
C[i]=c;
}
}
if(!found)break;
if(i==N-1){
p("YES");
print_vector(C); return 0;
}
}
}
}
p("NO");
return 0;
}