CF1072B Curiosity Has No Limits

思路:

对于序列t,只要第一个数确定了,后续的数也随之确定了。枚举四种情况即可。
实现:

 1 #include <iostream>
 2 #include <vector>
 3 
 4 using namespace std;
 5 int a[200005], b[200005];
 6 int get(int t, int a, int b)
 7 {
 8     int ans = 0, cnt = 0;
 9     while (t || a || b)
10     {
11         int x = t & 1, y = a & 1, z = b & 1;
12         if (x == 0 && y == 1 && z == 0) ans |= 1 << cnt;
13         else if (x == 1 && y == 1 && z == 1) ans |= 1 << cnt;
14         else if (x == 0 && y == 1 && z == 1) return -1;
15         else if (x == 0 && y == 0 && z == 1) return -1;
16         else if (x == 1 && y == 0 && z == 0) return -1;
17         else if (x == 1 && y == 0 && z == 1) return -1;
18         t >>= 1;
19         a >>= 1;
20         b >>= 1;
21         cnt++;
22     }
23     return ans;
24 }
25 int main()
26 {
27     int n;
28     while (cin >> n)
29     {
30         for (int i = 0; i < n - 1; i++) cin >> a[i];
31         for (int i = 0; i < n - 1; i++) cin >> b[i];
32         bool ok = false;
33         for (int k = 0; k < 4; k++)
34         {
35             if (ok) break;
36             vector<int> v;
37             v.push_back(k);
38             bool flg = true;
39             for (int i = 0; i < n - 1; i++)
40             {
41                 int tmp = get(v.back(), a[i], b[i]);
42                 if (tmp == -1) { flg = false; break; } 
43                 v.push_back(tmp);
44             }
45             if (flg)
46             {
47                 cout << "YES" << endl;
48                 for (auto it: v) cout << it << " ";
49                 cout << endl;
50                 ok = true;
51             }
52         }
53         if (!ok) cout << "NO" << endl;
54     }
55     return 0;
56 }

 

转载于:https://www.cnblogs.com/wangyiming/p/9833521.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值