forked from DionysiosB/CodeForces
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1031B-CuriosityHasNoLimits.cpp
53 lines (42 loc) · 1.4 KB
/
1031B-CuriosityHasNoLimits.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <cstdio>
#include <vector>
std::vector<std::vector<int> > getPair(int inor, int inand){
std::vector<std::vector<int> > ans;
if(inor < inand){return ans;}
for(int a = 0; a < 4; a++){
for(int b = 0; b <= a; b++){
std::vector<int> cur(2); cur[0] = a; cur[1] = b;
if(((a | b) == inor) && ((a & b) == inand)){ans.push_back(cur);}
}
}
return ans;
}
int main(){
long n; scanf("%ld", &n);
std::vector<int> vecor(n, 0); for(long p = 1; p < n; p++){scanf("%d", &vecor[p]);}
std::vector<int> vecand(n, 0); for(long p = 1; p < n; p++){scanf("%d", &vecand[p]);}
std::vector<int> t(n);
bool possible(false);
for(long s = 0; s < 4; s++){
t[0] = s;
for(long p = 1; p < n; p++){
std::vector<std::vector<int> > cur = getPair(vecor[p], vecand[p]);
bool done = false;
for(int u = 0; u < cur.size(); u++){
std::vector<int> tmp = cur[u];
if(t[p - 1] == tmp[0]){t[p] = tmp[1]; done = true; break;}
else if(t[p - 1] == tmp[1]){t[p] = tmp[0]; done = true; break;}
}
if(!done){break;}
if(p == n - 1){possible = true;}
}
if(possible){break;}
}
if(possible){
puts("YES");
for(long p = 0; p < n; p++){printf("%d ", t[p]);}
puts("");
}
else{puts("NO");}
return 0;
}