Codeforces 627 A. XOR Equation (数学)

题目链接:http://codeforces.com/problemset/problem/627/A

题意:

        告诉你s 和 x,a + b = s    a xor b = x   a, b > 0。 让你求符合条件的a b有多少对

思路:

        a + b = s , a ^ b = x   ==>   s - x = (a & b) * 2 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 int a[100], b[100];
 5 int main()
 6 {
 7     LL s, x;
 8     cin >> s >> x;
 9     LL y = s - x;
10     if(y % 2 || x > s) {
11         cout << 0 << endl;
12     } else {
13         y /= 2;
14         int pos1 = 0, pos2 = 0, cnt = 0, fuck = y ? 1: 0;
15         for( ; x; ++pos1, x >>= 1) {
16             if(x & 1) {
17                 ++cnt;
18                 a[pos1] = 1;
19             }
20         }
21         for( ; y; ++pos2, y >>= 1) {
22             if(y & 1)
23                 b[pos2] = 1;
24         }
25         int ok = 1;
26         for(int i = 0; i < max(pos1, pos2); ++i) {
27             if(a[i] && b[i]) {
28                 ok = 0;
29                 break;
30             }
31         }
32         if(ok) {
33             if(fuck) {
34                 cout << (1LL << ((LL)cnt)) << endl;
35             } else {
36                 cout << (1LL << ((LL)cnt)) - 2 << endl;
37             }
38         } else {
39             cout << 0 << endl;
40         }
41     }
42     return 0;
43 }

 

posted @ 2016-10-08 16:28  Recoder  阅读(337)  评论(0编辑  收藏  举报