2 条题解

  • 2
    @ 2025-11-24 10:48:13
    int l, r;
        cin >> l >> r;
        vector<int> ai(79), bi(79);
        for(int i = 0;i <= 63; i++)
        {
            ai[i] = l & 1 << i;
            bi[i] = r & 1 << i;
    //1 << i是2的i次方 此时ai为l的二进制 ,bi是r的二进制
        }
        int ans = 0;
        for(int i = 63;i >= 0; i--)
        {
            if(ai[i] != bi[i])  break;
    //从高位往低位找不相同的位置终止,加上前面的值
            ans += ai[i];
        }
        cout << ans << "\n";
    
    • @ 2025-11-24 10:48:53

      从l遍历到r时,只需将前高位相同值相加得出答案。

    • @ 2025-11-26 18:41:35

      wow❤️ @

信息

ID
1211
时间
1000ms
内存
256MiB
难度
8
标签
(无)
递交数
71
已通过
12
上传者