[CodeForces 276D] Little Girl and Maximum XOR (构造+脑洞)
2016-04-24 16:37
453 查看
CodeForces - 276D
给定一个 a和 b,要求在 a,b之间找一对数使得他们的异或和最大构造贪心题,方法是从高位开始考虑,尽量使此位为 1
那么必然有一个数此位为 0,另一个此位为 1
不难发现,如果二进制表示的 b位数比 a多
比如 a=01101,b=10110,那么一定可以构造出 11111
只要 l=01111,r=10000即可,并且这就是最大值
如果 a与 b的位数相同,那么可以抛去最高位的连续 1,直至 a与 b的位数不相同
比如 a=111001,b=111101,那么只能构造出 000111
#include <cstdio> #include <iostream> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath> #include <map> #include <set> #include <queue> using namespace std; typedef pair<int,int> Pii; typedef long long LL; typedef unsigned long long ULL; typedef double DBL; typedef long double LDBL; #define MST(a,b) memset(a,b,sizeof(a)) #define CLR(a) MST(a,0) #define Pow2(a) (a*a) LL A,B; int main() { scanf("%I64d%I64d", &A, &B); int st=max(64-__builtin_clzll(A), 64-__builtin_clzll(B)); LL ans=0; for(int i=st;i>=0;i--) { if((A&(1LL<<i))!=(B&(1LL<<i))) { ans=(1LL<<i+1)-1; break; } } printf("%I64d\n", ans); return 0; }
相关文章推荐
- 《The wisdom of the few》读书笔记
- IOS 设计模式命令模式
- 非计算机科班出身,如何成为一名技术牛人?
- caffe源码学习(二) Blob
- 学习进度08
- 4521: [Cqoi2016]手机号码|数位DP
- php在记事本中换行的问题
- 12 papers to understand QA system with Deep Learning
- IOS开发中可能会遇到的那点事。。。(持续更新)
- ActionBar的使用
- Hibernate HQL以及相关方法
- 面试:数组:合并区间:058
- The system cannot find the file specified
- 计蒜客 11066 A letter from Chensg
- popupwindow 显示和消失的动画
- 将百分制转换为五分制,如果输入的成绩超过了0~100时,抛出异常
- UVA_11137_Ingenuous Cubrency
- 第八周上机实践项目:矩阵元素变换
- 用python实现矩阵转置
- 关于Spring中的<context:annotation-config/>配置