2 条题解
-
0
//写0到15的二进制观察得 如果是2的0次方这一位 这个位上的数每2的0次方改变一次 即0 1 0 1 0 1 , 2的1次方每2次改变一次 即0 0 1 1 0 0 1 1 //其他位同理 我们只要找出l,r除以这个位的次方 看它们是在第几次改变 如果都在同一次改变 那l到r这个位均为同一个数 //并且是奇数次改变的时候 因为奇数次改变 这个位都是1 如果不在同一次则必定同时包含不同0和1 不能是按位与结果为1
#include <iostream>
using namespace std;
#define ll long long
int main()
{
ll l,r;
cin>>l>>r;
ll ans=0;
ll num=1;
while(r/num>0)//遍历每一位
{
if(l/num==r/num&&l/num%2!=0)//在同一次改 变 并且是奇数次改变
{
ans+=num;//符合按位与结果位1 累加答案
}
num=num*2;
}
cout<<ans<<endl;
return 0;
}
信息
- ID
- 1211
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 71
- 已通过
- 12
- 上传者