HDU5969 最大的異或

2021-08-14 16:22:06 字數 498 閱讀 5799

求l和r之間的數能得到的最大異或值

先把l r轉化為2進製儲存下來再從最高位往後遍歷一遍,如果某一位相同且是0說明這個位不管怎麼樣都不能取到1的數。

而如果是1則能取,則讓sum加上,執行到第乙個不同的位置就可以跳出啦,因為以下的每一位都是可以取到的,加完break即可

wa還是因為longlong。。

#include#includeint main()

,b[100]=,max,m;

long long l,r,sum=0;

scanf("%lld%lld",&l,&r);

if (l==r)

while (l!=0)

while (r!=0)

if (j>k) max=j;else max=k;

for (j=max-1;j>=0;j--)

else

}printf("%lld\n",sum);

}}

HDU 5969 最大的位或

開始這道題一直想著直接位運算去遍歷,排除情況,但資料量還是很大,後來把兩個數二進位制所有位都分別放在兩個bool型陣列裡,就簡單多了,只需要考慮輸入的那兩個數從哪一位開始出現不同,小數也就是下界,其到上界之內一定會出現與下界位數相等並所有位數全1的數,所以以上界數為基礎,存在乙個數使它一段字尾或運算...

HDU 5969 最大的位或

首先感謝這位前輩的部落格 這裡詳細說下自己的理解。這題主要是思路 輸入兩個整數l和r,求兩個數滿足l x y r,使得x y最大。另ans x y,那麼ans肯定的位數肯定和r一樣,因為位數越多,這個數就越大,位數最多的肯定是r。所以我們先把r用二進位制表示,把每一位存在乙個陣列裡面。然後從二進位制...

HDU 5969 最大的位或

題意 給定乙個區間,在這個區間內找到兩個數,使得他們的位或值最大。思路分析 我們可以從二進位制的角度來思考這個問題,我們有了乙個區間,那麼我們最終答案的二進位制的位數也就有了限制,那麼我們想要做的就一定是盡可能地把這些二進位制位全部變成1。由於我們一共選兩個數字或取最大值,區間最大值是一定要選的,因...