Atcoder做題總結
阿新 • • 發佈:2022-03-02
ARC058C
發現 \(x+y+z\) 最多隻有 \(17\) ,考慮狀壓,狀態中第 \(i\) 位表示是否可以得到和為 \(i\) 的字尾。
注意一下每個位置是放 \(1\) ~ \(10\) 而非 \(0\) ~ \(9\) 。
ARC133D
區間異或和不好搞,差分一下設 \(w_i = XOR_{k=1}^i k\) 。
容易發現規律: \(w_{4x}=4x\) , \(w_{4x+1}=1\) , \(w_{4x+2}=4x+3\) , \(w_{4x+3}=0\)
於是就可以快速計算了。
ARC129D
令 \(a_i\) 是在 \(i\) 處的操作次數,則有
\[2a_i - a_{i-1} - a_{i+1} = -A_i \]注意到這個形式類似差分,所以設 \(b\)
ARC130F
有些許噁心。
跟“魚戲團表演”可以說是非常相似了。
觀察題目性質,當操作次數趨於無窮時,最後的結果會像是一個凸包的形式。
如果只是這樣就沒有什麼噁心的地方了,直接求凸包算就行。
但是!
問題在於題目是取整的,這就導致了得到的結果實際上應該是折線。
對於“凸包”上的兩個點,如何算他們之間的貢獻呢?
很容易犯的錯誤是直接把直線畫出來,然後對每個點下取整。
我們發現的問題在於,“下取整”這一操作會使直線發生改變,從而影響後面的答案。
稍微玩一下就能確定算貢獻的過程,如果區間是 \((l,r)\)
正因為這一奇特的求貢獻方式,我們要求的“凸包”長歪了。
聯絡題目性質,知道求凸包時斜率應下取整