PIPIOJ 1436:PIPIのビット演算の問題Ⅰビット演算

http://pipioj.online/problem.php?id=1436
ここに画像の説明を挿入します
アイデア:L、RL、Rを組み合わせるLRはバイナリ表現に変換され、上位ビットから列挙されます。Ri= 1 R_i = 1の場合、明らかに、各ビットには4つのケースがあります(実際、R> = Lであるため、3つのケースしかありません)。R=1およびLi = 0 L_i = 0L=0で、すべてのR jR_jを取ることができますRJ00に設定0L j L_jLJ設定1 11(j> i)、これが最適解です。

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;

using ll=long long;

ll L,R;

int main()
{
    
    
    scanf("%lld%lld",&L,&R);
    ll ans=1ll<<60;
    while(ans)
    {
    
    
        if((R&ans)&&!(L&ans))
        {
    
    
            ans=(ans<<1)-1;
            break;
        }
        ans>>=1;
    }
    printf("%lld\n",ans);
    return 0;
}

おすすめ

転載: blog.csdn.net/xiji333/article/details/114459104