HDU 5969 最大的位或
2016-11-06 21:27
671 查看
最大的位或
开始这道题一直想着直接位运算去遍历,排除情况,但数据量还是很大,后来把两个数二进制所有位都分别放在两个bool型数组里,就简单多了,只需要考虑输入的那两个数从哪一位开始出现不同,小数也就是下界,其到上界之内一定会出现与下界位数相等并所有位数全1的数,所以以上界数为基础,存在一个数使它一段后缀或运算全为1。最后上界数变换完就是结果。例如:二进制100100101101和100101101011第六位发现不一样,所以在这之间必然有100100111111,然后就把后面上界数>6的位都变成1。#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
__int64 a,b;
bool A[65],B[65];
int main()
{
int t,i;
scanf("%d",&t);
while(t--)
{
scanf("%I64d%I64d",&a,&b);
int j=63;
for(i=1;i<=64;i++)
{
A[i]=(a>>j)%2;
B[i]=(b>>j)%2;
j--;
}
int I=64;
for(i=1;i<=64;i++)
{
if(A[i]!=B[i])
{
I=i;
break;
}
}
for(i=I+1;i<=64;i++)
B[i]=1;
__int64 sum=0;
for(i=1;i<=64;i++)
{
sum<<=1;
sum+=B[i];
}
printf("%I64d\n",sum);
}
return 0;
}
相关文章推荐
- hdu 5969 最大的位或 2016ACM/CCPC合肥赛区现场赛I
- hdu 5969 最大的位或【贪心】
- 最大的位或 HDU - 5969
- HDU 5969 最大的位或
- hdu 5969 最大的位或(找规律)
- hdu_5969_最大的位或(贪心)
- HDU 5969 最大的位或 (思维题 贪心)
- hdu-5969 最大的位或(二进制,找规律)
- HDU 5969 最大的位或
- HDU 5969 最大的位或
- HDU 5969 最大的位或
- HDU 5969 最大的位或 【贪心】 (2016年中国大学生程序设计竞赛(合肥))
- HDU 5969 最大的位或 【贪心】 (2016年中国大学生程序设计竞赛(合肥))
- HDU 5969 最大的位或 —— 贪心 + 二进制的理解
- 【HDU 5969 最大的位或】 + 异或
- 2016 ccpc HDU 5969 最大的位或
- hdu 5969 最大的位或
- HDU 5969 最大的位或 (思维)
- HDU 5969 最大的位或
- hdu5969-贪心&思维&证明-最大的异或