LG模擬賽 3 T2 簽到題

2021-10-19 21:17:09 字數 1402 閱讀 6236

你面前有乙個來歷不明的 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 的數量。

除了我都切了,我好菜啊。

具體來說就是找到後面(

log⁡2m

)+

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 題解

將病毒按攻擊力從小到大排序,網線也從小到大排序,乙個病毒能入侵的網路比它強的病毒也能入侵,如果病毒攻擊力遞增,下乙個病毒可入侵網路在此基礎上擴充套件即可,每個節點只擴充套件一次,不會撤銷,每次將病毒可入侵的邊加入,用並查集維護連通塊 利潤和,最高重要度及其個數,並統計這次入侵的連通塊,注意判重。然後...