hdu 5969 最大的位或(貪心)

2021-08-29 13:50:01 字數 406 閱讀 8370

對於乙個l和r

我們都看成2進製

最優情況一定是1000和0111來異或這樣就能得到在位數不可能改變的情況下能夠得到的最大值,

那麼如果l到r能夠存在這種情況就這麼異或

但如果l和r的位數相同,那麼就保留前面相同位數上的0和1,一旦遇到不同則按照以上方法對低位取***xx1000和***xx0111異或

#includeusing namespace std;

int main()

cin>>t;

while(t--)

int js1=0;

while(r)

if(js1!=js)

else

}cout<} }

return 0;

}

HDU 5969 最大的位或

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

HDU 5969 最大的位或

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

HDU 5969 最大的位或

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