你面前有乙個來歷不明的 01 序列 a
0...m−
1a_
a0...m
−1 ,為了調查明白這東西是從**冒出來的,你想知道有多少個整數 x∈[
0,l]
x \in [0,l]
x∈[0,l
] 滿足 ∀i∈
[0,m
−1],
popcount(
x+i)
mod2
=a
i\forall i\in [0,m-1], \operatorname(x+i)\bmod 2=a_i
∀i∈[0,
m−1]
,pop
coun
t(x+
i)mo
d2=a
i。popcount(
x)
\operatorname(x)
popcou
nt(x
) 定義為 x
xx 的二進位制表示中的 1
11 的數量。
除了我都切了,我好菜啊。
具體來說就是找到後面(
log2m
)+
1(\log_2 m)+1
(log2
m)+1
位,然後列舉這些位是多少,這樣最多往前面進1。
先考慮不往前進1的情況,很容易算,具體可以看**,不再贅述。
往前進1時,我們數一下進一之後會有多少個位置受影響,將其分為兩種情況,一種是進製之後改變了奇偶性,另一種是進製之後沒有改變奇偶性。
每次只需要花費位數的時間就可以進行統計了,後面也是暴力檢驗,如果成功加入答案就可以了。
比賽的時候思路偏了,一直在想如何通過倒著插入trie樹或者找規律去解決這道題目,沒有想到去限制某一部分,使得最多向前進製1這種優美性質。
繼續加油!
#include
using
namespace std;
const
int n=
2048
;int t,a[n]
,m,cnt[n]
;long
long l;
long
longf(
long
long x,
bool t)
intmain()
if(tf) ans+=f
((l-i)
/t,x);}
else
for(
int j=
0;j<
2;j++)if
(c[j])}
if(tf) ans+
=c[j];}
}}printf
("%lld\n"
,ans);}
}
LG模擬賽 2 T3 搬題
可憐的出題人 跟九條可憐沒有關係 要給 n nn 個地方出題。但是出題人太累了,他決定把以前給這些地方出過的題重新搬一搬。這 n nn 個地方以 1,n 1,dots,n 1,n 編號。出題人總結出了他們之間的聯絡,是乙個樹形。如果出題人把以前給第 i ii 個地方出的題搬到第 j jj 個地方,那...
LG模擬賽 2 T2 kk公司,貪心合併
kk 公司有很多 kk,還有很多 cy。除了老闆之外,每個人都有乙個直屬的上司。某天他們想要拍一張合照。出於尊敬,每個人都必須站在自己的上司的右側 不需要緊挨著 但是老大認為 kk 站在 cy 的左邊不好。合照中每有一對 kk 和 cy,使得 kk 站在 cy 的左邊 不需要緊挨著 那麼老大的憤怒值...
2017noip模擬賽T2 attack 題解
將病毒按攻擊力從小到大排序,網線也從小到大排序,乙個病毒能入侵的網路比它強的病毒也能入侵,如果病毒攻擊力遞增,下乙個病毒可入侵網路在此基礎上擴充套件即可,每個節點只擴充套件一次,不會撤銷,每次將病毒可入侵的邊加入,用並查集維護連通塊 利潤和,最高重要度及其個數,並統計這次入侵的連通塊,注意判重。然後...