hdu 6702 ^&^ 位运算

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

位运算还是按位考虑

abc
1110
100/10
010/10
0000

 

 

 

 

 

 

 

这是保证式子值最小下的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 }

 

转载于:https://www.cnblogs.com/iat14/p/11403607.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值