退役前的做題記錄3.0


upd on 2020.10.17:
不補前面的咕掉的了,隨緣更

upd on 2021.7.29:
博主退役了,沒 4.0 了(雖然沒退役也不一定有

CF1172F Nauuo and Bug

每個區間\([l,r]\)維護一個數組\(c_x\)表示最小的數經過\([l,r]\)后需要減去\(x\)\(p\)
然后我們需要合並兩個區間的\(c\)數組。
直接暴力更新的話就是對於\(\forall x,y,c_{x+y}=\min\{c_{x+y},\max\{c_x,c_y-sum_{ls}+xp\}\}\),表示經過了\([l,mid],[mid+1,r]\)的步數是這么多需要的初值。
\(c\)顯然單調,但是合並的話還需要\(c_x-sum+xp\)單調,即\(c_x-c_{x-1}\geq p\),這一點比較顯然。
線段樹上雙指針合並一下\(c\)就好了。
code

CF643G Choosing Ads

很有意思的題。
考慮一個求數組中出現次數\(>50\%\)的算法:每次隨便選出兩個不同數並刪掉,最后剩下的那個數就是我們所求的答案。
將這個算法擴展到\(k\%\)就是每次選出\(\lceil\frac {100}k\rceil\)個數,最后剩下的小於\(\lceil\frac {100}k\rceil\)個數就是可能的答案。
線段樹每個區間維護這個選擇過程即可。
code

CF704D Captain America

不妨設\(R<B\),那么我們就是要盡量選\(R\)
對於橫縱坐標分別建點,那么一個點就相當於\(x\to y\)連邊,每個限制就是\(S\to x\)\(y\to T\)連容量在\([l,r]\)之間的邊,對這個二分圖跑出的最大流就是最多可選的\(R\)
code

CF704E Iron Man

\(t\)\(x\)軸,\(dfs\)序為\(y\)軸建立坐標系,樹鏈剖分后可以將一條路徑轉為\(\log\)條連續的\(dfs\)序,一段連續的\(dfs\)序可以看成一條線段。
那么我們現在就是要對每條重鏈考慮其\(x\)最小的兩兩直線的交點,考慮掃描線維護。
但是每個直線上的\(y\)坐標時刻變化,我們手頭貌似並沒有很好的數據結構,其實不然。
對於還未產生交點的某一時刻,下一個交點產生位置一定是相鄰的兩個\(y\)坐標之間的,而對於所有直線,如果未產生交點的話它的比較方式就和之前時間的比較方式是一樣的,直接把當前的\(y\)丟進 \(\text{set}\) 定義一下比較方式就好了,注意如果當前時間過了產生交點的時間就必須 \(\text{break}\)
這題精度非常卡,建議手寫分數類(本人沒寫導致卡了十幾發)。
code

ARC117D Miracle Tree

不知道為什么自己一開始覺得這做法是假的
考慮將所有\(E\)拿出來從小到大排序,假設排序后從小到大的編號為\(p_i\),那么有\(dist(p_i,p_{j})\leq E_{p_{i}}-E_{p_j}\),又因為\(dist(p_L,p_R)\leq \sum_{i=L}^{R-1}dist(p_i,p_{i+1})\),所以我們令\(E_{p_{i+1}}-E_{p_i}=dist(p_{i},p_{i+1})\)肯定是合法的且答案最小,那么最終答案就是\(\sum_{i=1}^{n-1}dist(p_i,p_{i+1})=2(n-1)-dist(p_1,p_n)\),令\(p_1,p_n\)為直徑兩端,一遍\(dfs\)構造即可。

code

ARC117E Zero-Sum Ranges 2

首先對於某個序列我們求出它的前綴和,設每種前綴和的數量為\(a_i\),那么最終就是要統計\(\sum {a_i\choose 2}=K\)的序列個數。
考慮dp,通常我們選擇的dp狀態為從左往右掃描,但是在這題中這樣的狀態無法轉移,所以我們對於前綴和數組所構成的折線,從上往下掃描來設計狀態。
arc117E1
(圖片來自官方題解)
\(f_{i,j,k}\)表示目前已經填上了\(i\)個前綴和的位置,\(\sum{a_i\choose 2}=j\),除了兩端還有\(k\)個“洞”的方案數。
解釋一下“洞”的含義:因為只能填\(0/1\),所以我們轉移時當前層每個數旁邊肯定要放一個數,而相鄰的兩個可以共用一個數,所以可以把“洞”理解為除了開頭和結尾的相鄰的中間還可以放數的地方。
枚舉下一層選\(x\)個數可以得到轉移:\(f_{i+x,j+{x\choose 2},x-(k+2)}\leftarrow f_{i,j,k}\times {x-1\choose k+1}\)(注意我們沒有算開頭結尾但是開頭結尾實際上也要放)
如果還沒有理解的話可以看下下面這張圖片(來自官方題解):
ARC117E2

最后統計答案就是枚舉一個前綴和為\(0\)的分界位置,然后把正負拼到一起,答案就是\(\sum f_{i,j,k}\times f_{2N+1-i,K-j,k-1}\)

code

AGC053C Random Card Game

考慮對於給定兩堆的答案,假設最后分為了\(A,B\)兩堆且\(2N\)這個數在\(B\)中,對於\(A\)中的每個數\(A_i\),記\(j\)為最小的使得\(B_j>A_i\)的位置,令\(d=\max_i j-i\)那么答案為\(N+d\),下面證明這個結論:
必要性顯然,充分性考慮從\(d\)入手,當\(d>0\)時,找到使\(j-i=d\)的最小的\(i\)然后做操作\(k=i\)可以使\(d-1\),否則直接從\(i\)最大的開始一個個刪就好了。
\(p(i)\)\(d\leq i\)的概率,那么最終答案為\(2N-\sum_{i=0}^{N-1}p(i)\),考慮如何算出\(p(d)\)
最后發現\(p(d)=\prod_{i=1}^{N-d}\frac {2i+d-1}{2i+d}\prod_{i=N-d+1}^N\frac {N+i-1}{N+i}\),組合意義就是每次加入的數除了當前場上最大的都行,然后應為前面的數都是這樣子限制的所以可以類似條件概率那樣子想(和 \(\mathsf{\color{black}{x}\color{red}{gzc}}\) 討論了一下發現這樣子應該是最好理解的了,如果有更好的理解方式歡迎來錘)。
然后\(O(n)\)算下上面那玩意兒就完事了。

code

ARC110D Binomial Coefficient is Fun

補上\(A_0=0\),那么就是要求\(\prod _{i=0}^n{B_i\choose A_i},\sum_{i=0}^nB_i=m\)的答案。
考慮\({B_i\choose A_i}\)的組合意義,即\(B_i+1\)個球中間插\(A_i\)個板的方案數。
又因為每對\((A_i,B_i)\)分開考慮再乘起來比較棘手,考慮將總共的\(n+1+m\)個球放到一起考慮。
我們可以新加\(n\)個板表示“分割板”,就是將每個不同的\(B_i\)給分開,那么原來的方案數就是先插\(n\)個“分割板”,再在分成的\(n+1\)段中分別插入\(A_i\)個板的方案數。
容易觀察得知,該問題的答案和直接插入\(n+\sum A_i\)的答案相同,那么原問題的答案就是\({m+n\choose n+\sum A_i}\)
最后\(O(\sum A_i)\)求解即可。

code

ARC110E Shorten ABC

\(A,B,C\)看作\(1,2,3\),那么每次操作就是將\(a_i,a_{i+1}\)替換為\(a_i\oplus a_{i+1}\)
那么我們可以有另一個過程來描述變化:將原串分割成若干段不同的子段,滿足每一個子段間異或和不為\(0\)且不全相同,最終得出的新串就是所有子段的異或和。
特判掉字符全部相同的情況,那么問題我們可以將一段相同字符的子段縮起來是等價的,考慮在該限制下統計答案。
自然想到對於一段合法的串\(T\),我們如何去判斷它是否能被生成:從前往后貪心匹配,能選擇選。
由此設計出一個 dp 狀態:\(f_i\)表示\(1\sim i\)能夠生成的不同\(T\)的個數,同時記\(nxt_{i,j\in\{0,1,2,3\}}\)表示下一個前綴和為\(j\)的位置,然后轉移到\(j\)不等於當前異或前綴和的\(f_{nxt_{i,j}}\),因為該 dp 可以很好的表示上面的貪心過程所以正確。
最后答案就是所有\(i+1\sim n\)異或和為\(0\)\(f_i\)之和。

code

ARC110F Esoswap

首先考慮構造出 \(N-1,N-2,...,1,0\),可以從\(p_{N-1}\)\(p_0\),如果\(p_{N-1-i}\neq i\)就一直對\(N-1-i\)操作,這樣子構造的話從大到小僅有\(i\)能改變\(i+1\sim N-1\)的結果(\(<i\)的已經固定在后綴上,\(>i\)的會跳過這段后綴)但是這時候我們會停,所以最后的結果就是排成 \(N-1,N-2,...,1,0\)
如何還原出\(0,1,2...N-1\)我們考慮\(1\)的特殊性,還是從大到小把每個\(i\)放在對應位置:可以每次將\(1\)挪到位置\(i\),此時\(i\)必定出現在\(0\)位置,再對\(0\)操作就好了,正確性顯然。
該構造操作次數為\(O(N^2)\),可以通過。

code


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM