本題是讓我們選擇[0,m]
之間的乙個整數x,經過給定的n次位運算,使結果ans最大。
位運算的主要特點之一是在二進位制表示下不進製。正因為如此,在x可以任意選擇的情況下從,參與位運算的各個位(bit)之間是獨立無關的。換言之,對於任意的k(0<=k<30),「ans的第k位是幾」只與「x的第k位是幾」有關,與其他位無關。所以我們可以從高位到低位,依次考慮x的每一位填0或者填1。
x的第k位應該填1,當且僅當同時滿足以下兩個條件:
1.已經填好的更高位數構成的數值加上1如果不滿足上述條件,要麼填1會超過m的範圍,要麼填1不如填0更優。這種情況下令x的第k位為0顯然更好。確定x的每一位,自然可以得到ans的值
#includeusing namespace std;
int n,m;
paira[100005];
int calc(int bit,int now)
return now;
}int main()
int val=0,ans=0;
for(int bit=29;bit>=0;bit--)
cout<
return 0;
}
BZOJ3668 起床困難綜合症
description 21 世紀,許多人得了一種奇怪的病 起床困難綜合症,其臨床表現為 起床難,起床後精神不佳。作為一名青春陽光好少年,atm 一直堅持與起床困難綜合症作鬥爭。通過研究相關文獻,他找到了該病的發病原因 在深邃的太平洋海底中,出現了一條名為 drd 的巨龍,它掌握著睡眠之精髓,能隨意...
codevs3311 起床困難綜合症
題目 wwq 這題你居然沒一眼切?嗯 二進位制列舉 判斷不超過m的二進位制數的每一位是1更優還是0更優 顯然同時滿足我們要放0 為了便於判斷大小,從高位到低位列舉 複雜度 2 n log m include include include include define ll long long us...
NOI2014 起床困難綜合症
noi2014 起床困難綜合症 又刷了一道水題qwq 它給你n扇門,每扇門都有乙個值和乙個操作,這個操作為or and xor之間的某乙個。你需要從m中任意選取乙個數,使得這個數依次經過n扇門之後的值最大。n是1e5的,m是1e9的,如果你直接暴力列舉每乙個數,求最大值,複雜度顯然是1e14的,了。...