hdu 6702 ^&^ 位运算

(A  xor  C)  &  (B  xor  C) 在给定A,B的前提下,式子值最小,此时C的非0最小值是多少?

位运算还是按位考虑

a b c
1 1 1 0
1 0 0/1 0
0 1 0/1 0
0 0 0 0

 

 

 

 

 

 

 

这是保证式子值最小下的abc关系,我们希望c最小,那么c可以取a&b。

但是注意,题目中要求,C非0,所以如果a&b为0,则不行。当a&b为0时,我们应该找,最小的a,b有一个为1的位,将c的这位0变成1。

一个是注意开long long这题正好比int大2倍,在一个是注意位运算优先级。第一次知道!= 优先级比位运算高.....

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 typedef long long ll;
 5 ll a,b,res;
 6 int T;
 7 int main()
 8 {
 9     for (scanf("%d",&T);T != 0;T--)
10     {
11         scanf("%lld%lld",&a,&b);
12         if ((a & b) != 0)
13             res = a & b;
14         else
15             for (int i = 0;i <= 33;i++)
16                 if ((a & ((ll)1 << i)) | (b & ((ll)1 << i)))
17                 {
18                     res = (ll)1 << i;
19                     break;
20                 }
21         printf("%lld\n",res);
22     }
23     return 0;
24 }

 

posted @ 2019-08-24 09:40  IAT14  阅读(261)  评论(0编辑  收藏  举报