解:m = 0的部分分,直接模擬。有and 0的部分分,直接模擬。<=1000的部分分,列舉攻擊力之後模擬。所有操作相同的部分分,可以合併成只有乙個操作。然後列舉m或者逐位貪心。
正解是逐位貪心,內層跑一遍1~n個操作。然後後面這個1~n其實可以優化,在外層用00000...0和11111...1來一次性搞完即可。
1 #include 2ac**3const
int n = 100010;4
5int
a[n], opt[n], n, m;
6char str[5]; ///
0 and & 1 or | 2 xor ^78
namespace
m0 15
else
if(opt[i] == 1
) 18
else
if(opt[i] == 2
) 21
}22 printf("
%d\n
", ans);
23return;24
}25}26
27namespace
bf 36
else
if(opt[j] == 1
) 39
else42}
43 ans =std::max(ans, x);44}
45 printf("
%d\n
", ans);
46return;47
}48}49
50namespace
same
57else
if(opt[i] == 1
) 60
else63}
64int ans = 0;65
if(m <= 100000
) 70
else
if(opt[1] == 1
) 73
else
if(opt[1] == 2
) 76}77
}78else85}
86else
if(opt[1] == 1
) 90}91
else95}
96}97if(opt[1] == 0
) 100
else
if(opt[1] == 1
) 103
else
106}
107 printf("
%d\n
", ans);
108return
;109
}110
}111
112int
main()
122if(i > 1 && opt[i] != opt[i - 1
]) 125
}126
127if(!m ||flag1)
131if(n <= 1000 && m <= 1000
) 135
if(flag2)
139140
int ans = 0, now = 0
;141
for(int i = 29; i >= 0; i--)
148else
if(opt[j] == 1
) 152
else
156}
157if
(t0)
160else
if(t1 && (now | (1
<< i)) <=m)
164}
165 printf("
%d\n
", ans);
166return0;
167 }
998 起床困難綜合症
本題是讓我們選擇 0,m 之間的乙個整數x,經過給定的n次位運算,使結果ans最大。位運算的主要特點之一是在二進位制表示下不進製。正因為如此,在x可以任意選擇的情況下從,參與位運算的各個位 bit 之間是獨立無關的。換言之,對於任意的k 0 k 30 ans的第k位是幾 只與 x的第k位是幾 有關,...
BZOJ3668 起床困難綜合症
description 21 世紀,許多人得了一種奇怪的病 起床困難綜合症,其臨床表現為 起床難,起床後精神不佳。作為一名青春陽光好少年,atm 一直堅持與起床困難綜合症作鬥爭。通過研究相關文獻,他找到了該病的發病原因 在深邃的太平洋海底中,出現了一條名為 drd 的巨龍,它掌握著睡眠之精髓,能隨意...
codevs3311 起床困難綜合症
題目 wwq 這題你居然沒一眼切?嗯 二進位制列舉 判斷不超過m的二進位制數的每一位是1更優還是0更優 顯然同時滿足我們要放0 為了便於判斷大小,從高位到低位列舉 複雜度 2 n log m include include include include define ll long long us...