2 条题解

  • 0
    @ 2025-11-30 10:29:34

    //写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
    上传者