兔子的区间密码-最大异或对
生活随笔
收集整理的這篇文章主要介紹了
兔子的区间密码-最大异或对
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
D兔子的區間密碼:位運算
D兔子的區間密碼
題意:在區間[a,b]中任選兩個數,要求兩者異或值(XOR)最大
題解
對于a 和 b的二進制表示 ,從最高位往最低位看,前面位數相同的異或一定為0,所以,我們只需要看 那個不同的最高位。
比如 a=100110 ,b=101000, 兩者異或 ,得到 1110,這個數的位數就是不同的那個最高位,即第4位。然后答案一定就是這4位異或之后全為1,即1111,答案就是1111 的十進制表示即15.
為什么呢?
對于100110 和101000中,我們可以取100110 和101001(其中前面相同的最高位可以不用看),兩者異或為1111.
ac代碼
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll a,b; int main(){int t;cin>>t;while(t--){cin>>a>>b;ll ans=1;ll c=a^b;//得到c的位數while(c>0){ans<<=1;//有幾位 ,其位上全1即為答案 ,轉化為十進制擴大兩倍 c>>=1;} cout<<ans-1<<endl;}} // 100110 101100// 38 40總結
以上是生活随笔為你收集整理的兔子的区间密码-最大异或对的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高精度减法板子
- 下一篇: 信用卡违约金可以减免吗