AGC 營業記錄


仿照神仙們寫做個 AGC 清單吧。

把自己以為有意思的題目搬上來。

之后可能考慮分開寫。

[AGC001E] BBQ HARD \(\star\)

Difficulty: \(\color{blue}{\texttt{?}}\)

不會思維題。非常自閉。

容易發現這個式子等價於格路行走。

分別映射到左下角和右上角,然后 \(O(s^2)\) 做一次 dp 就好了。

[AGC001F] Wide Swap

Difficulty: \(\color{blue}{\texttt{?}}\)

🕊

[AGC002E] Candy Piles \(\star\)

Difficulty: \(\color{red}{2889}\)

小清新的博弈論。

首先容易發現題意等價於網格圖上行走。

再觀察一下,對於 \(x-y\) 相同的位置的勝負態一定相等。

於是做完了。

[AGC003E] Sequential operations on Sequence \(\star\)

Difficulty: \(\color{red}{2983}\)

感謝此題提醒我不是思維選手的事實。

容易令 \(q_i\) 單增。考慮倒推,每次計算插入一串的貢獻。

這一串有一部分是上一個串的重復,還剩下某個長度為 \(l\) 的前綴。此時我們找到一個 \(q_x\) 使恰好比 \(l\) 小,那么就可以繼續這個流程,且每次取模都是有意義的。

眾所周知有意義的取模只有 \(\log\) 次,因此能做到 \(O(n\log^2 n)\)

[AGC004E] Salvage Robots

Difficulty: \(\color{brown}{3205}\)

一開始想直接枚舉矩形的左下角,后來發現好像能救的並不形成一個矩形。

但是有機會能救的一定是一個矩形,設當前向各個方向走的步數為 \(S_{0,1,2,3}\) ,然后記最大貢獻為 \(dp_S\) ,考慮轉移。

不妨考慮向上走,那么救到的人形成一個橫着的豎條,顯然可以 \(O(1)\) 轉移。

於是就能做到 \(O(n^4)\) ,常數很小,可以輕松通過。

[AGC005D] ~K Perm Counting

Difficulty: \(\color{red}{2943}\)

考慮容斥。

首先拆成幾條鏈。

對每條鏈計算欽定 \(i\) 個位置違反的代價,這個甚至可以 dp 。

最后拼到一起就好了。。

[AGC005E] Sugigma: The Showdown

Difficulty: \(\color{brown}{3276}\)

考慮在 \(B\) 樹上的一條邊,如果在 \(A\) 樹上對應的兩個點距離大於等於 \(3\) ,那么走到那里直接就贏了。

那么容易發現,如果 \(A\) 走了一步以后又往回走,顯然就輸了。

於是只需要模擬 \(A,B\) 走就行了。復雜度 \(O(n \log n)\)

[AGC005F] Many Easy Problems

Difficulty: \(\color{brown}{3440}\)

考慮一條邊何時產生貢獻。

記這條邊鏈接兩端的 size 為 \(x\)\(n-x\),容斥,則對於集合大小為 \(k\) 時的貢獻就是 \(\binom{x}{k}+\binom{n-x}{k}\)

我們統計出所有可能的 size。記有 \(w_x\) 種情況令 size 為 \(x\),那么容易有:

\[Ans_k=\sum_{i=k}^n w_i \binom{i}{k} \]

NTT 優化即可。

[AGC006E] Rotate 3x3

Difficulty: \(\color{red}{3101}\)

這題 xzy 好像在若干年前就會了,膜拜 xzy。

首先考慮一列,顯然列包含的數字構成的集合不會改變,中間的數字也不會改變,此外每操作一次就交換上下的數字。

另外容易發現奇/偶數列只能內部交換,每次操作奇偶內部的逆序對數量奇偶性改變,而被交換上下的位置數目奇偶性也改變。於是隨便判斷一下就好了。

[AGC006F] Blackout \(\star\)

Difficulty: \(\color{brown}{3530}\)

轉化一步題意:

現在給一張圖,如果存在 \(a \rightarrow b \rightarrow c\),你就能新建一條邊 \(c \rightarrow a\)

考慮什么時候會把一個連通塊變成完全圖,首先如果有一條雙向邊顯然就變成完全圖了。

考慮拓展,我們給出如下的結論:

如果存在從 \(a\)\(b\) 的長度 \(\text{mod 3}\) 不同的路徑,那么可以通過操作令 \(a \leftrightarrow b\)

證明考慮歸納。

這啟發我們對這張圖三染色。注意到題目的性質,我們令 \(1 \rightarrow 2 \rightarrow 3 \rightarrow 1\),然后如果不是完全圖,那么對於任意的 \(C_x=1,C_y=2\) 都有 \(1 \rightarrow 2\)。剩下的情況類似。

注意一些特殊的情況。

[AGC007E] Shik and Travel

Difficulty: \(\color{gray}{3906}\)

首先考慮到一條合法的路徑是一個 \(\text{dfs}\) 的過程,你每次可以隨意選擇一個子樹走進去。

二分答案,我們需要每個子樹滿足條件的同時,合理的決定子樹的行走順序。

\(dp_{i,l}\) 表示子樹 \(i\),進入時長度為 \(l\),出去時的最小長度。

容易發現對於相同的 \(dp\) 值,我們只需要保留 \(l\) 最小的。

有這樣的推論:

\(cnt_x\) 表示點 \(x\) 的有意義的 \(dp\) 值數目,有:
\(cnt_x\leqslant 2\min\{cnt_{son_x}\}\)

事實上我們參考轉移的過程就容易得到這一結論。

於是轉移時點 \(x\) 我們可以雙指針做到 \(O(\sum cnt_{son_x})\),毛估估一下 \(O(n\log n)\),因此直接轉移就可以通過此題。

[AGC008D] K-th K

Difficulty: \(\color{goldenrod}{2164}\)

經典不會貪心。

按照每個數字欽定的位置貪心從前向后填,然后在從后向前填。

考慮這樣的正確性:感覺好對啊(誤

[AGC008E] Next or Nextnext \(\bigstar\)

Difficulty: \(\color{brown}{3559}\)

考慮這樣一個事實,我們首先建立 \(i \rightarrow p_i\) 的邊,這樣形成了若干個環。

此外,我們考慮操作會帶來的影響。建立另一張圖包含 \(i \rightarrow a_i\) 的邊,它一定是由上一張圖經過某些操作得來的。現在我們得到了第二張圖,需要復原出第一張圖。

容易發現,我們抽出第一張圖的一個環,做若干次操作后只有可能:

  1. 沒有變化。
  2. 變成另外一個環(邊數是奇數)或者分裂成兩個環(邊數為偶數)。
  3. 變成一顆內向基環樹。

考慮將第二張圖的元素復原,對於一個環,你可以欽定它為操作 \(1\),也可以欽定為操作 \(2\)。對於一顆基環樹,我們需要考慮它能否復原,以及方案數。

設長度為 \(l\) 的環有 \(w\) 個,那么它的貢獻就是:

\[\sum_{i=0}^{\frac{w}{2}}\binom{w}{2i}l^if_i2^{w-2i*(l\not=1 \and l\&1=1)} \]

其中 \(f\) 是合並的系數。

現在來考慮基環樹的貢獻,容易發現基環樹的環上只會套鏈,考慮怎么把鏈合並進去。事實上容易發現有兩種合並方法,但是需要滿足空間足夠。

\(O(n)\)

[AGC008F] Black Radius \(\star\)

不妨先考慮每個點都是好的情況。

我們考慮每次染掉一個連通塊時,在這個連通塊的重心統計答案,即我們只計數令 \(d\) 最小的情況。

首先考慮到染全樹的時候,可能有多個點滿足 \(d\) 最小,所以我們分開計算這種情況。

對於一個點 \(x\),有哪些 \(d\) 滿足條件。記從 \(x\) 出發最遠的點是 \(f_x\),那么因為不能染全樹,因此有 \(d < \text{dist}(x,f_x)\)

我們考慮何時存在一組 \((y,d')=(x,d)\)\(d' \le d\)

給出結論:

如果不存在 \(y\)\(x\) 鄰域上且 \((y,d-1)=(x,d)\),那么 \((x,d)\) 合法。

我們設 \((z,d')=(x,d)\),通過仔細分析 \(x-z\) 路徑長度的奇偶性即可得證。

現在已知了這個,那么記 \(g_x\)\(x\) 向除了 \(f_x\) 方向的子樹以外走最遠的距離,我們還有 \(d-2 < \text{dist}{g_x}\)

於是我們就解決了每個點都是好的情況。

假如有一些點不是好的,我們要扣掉這些貢獻。具體來說,如果一個點 \(x\) 不是好的,我們對於每個原來會產生貢獻的 \((x,d)\) 考慮能不能有另外一個點產生貢獻。

顯然如果覆蓋了某一個有關鍵點的子樹就必定可以有貢獻。

換根維護上述內容即可解決。

[AGC009E] Eternal Average

Difficulty: \(\color{brown}{3428}\)

杜撰一下這題咋做。

容易將題意轉化為一個 \(n+m\) 個葉子的樹,第 \(i\) 層的 \(1\) 的貢獻是 \(\dfrac{1}{k^i}\),你需要計數貢獻的種類數。

直接 dp 的困難在於難以描述目前的值。

實際上我們只需決定最后的值轉化為 \(k\) 進制的形式。得到每層用了幾個 0/1,考察是否能構造一個合法樹就行了。

\(x_i\) 表示第 \(i\) 層用了幾個 \(\texttt{1}\)\(y_i\) 表示第 \(i\) 層用了幾個 \(\texttt{0}\),顯然有:

\[\sum \dfrac{(x_i+y_i)}{k^i}=1\\ \sum x_i=n,\ \sum y_i=m \]

轉成 \(k\) 進制的話,就要把同層的若干個 \(0/1\) 挪到上一層,也就是:

\[\sum \dfrac{(x_i+y_i)}{k^i}=1\\ \sum x_i=n-a(k-1),\ \sum y_i=m-b(k-1) \]

另外假設小數部分長度為 \(l\),上面的條件等價於 \(\sum y_i=l(k-1)+1-\sigma x_i\)

考慮 dp,記 \(dp_{i,j,0/1}\) 表示目前到第 \(i\) 位,\(\sigma x_i = j\) 的方案,目前是否是 \(0\),即可解決。

[AGC010F] Tree Game

Difficulty: \(\color{red}{2897}\)

考慮 \(n=2\) 的情況,如果 \(A_1 \not = A_2\),就把棋子放在多的那一邊然后移,這樣就能贏。

拓展到菊花,如果菊花的中心最小,那么隨便把點放在一個更大的葉子,每次向菊花跑就能贏。否則就從菊花開始向最小的點跑,這樣也一定能贏。

總結一下,能得到一下的結論:

如果一個點的值小於等於其每個鄰域上的點,那么先手必負。

此時我們暴力 \(O(n^2)\) 枚舉根就做完了。

以下是口胡:

我們考慮如何才能先手必勝。

如果從一個位置往大於等於自己權值的位置跑,顯然是有害的,我們只能向更小的地方跑。

那么如果一個點走不動了就輸了,這樣就變成了 \(dag\) 上游走博弈。

拓撲排序即可。 \(O(n)\)

[AGC011D] Half Reflector

Difficulty: \(\color{red}{2931}\)

觀察一下,首先連續的一段 \(AAAAAB\) 會變成 \(BBBBAB\),而且除了被第一個位置擋住以外,都會從最后跑出來。

那么總結一下,每次都是左移一位再全取反。

[AGC011F] Train Service Planning

Difficulty: \(\color{gray}{3863}\)

考慮判斷 \(-1\),如果 \(b_i=1\)\(2a_i>k\) 則顯然不合法。

不妨先考慮 \(b_i=1\) 的情況:

顯然,我們只需關心前 \(k\) 秒,火車的運行情況。對於每兩行之間,我們需要插入兩輛相向的火車,它們不能有交。

考察這樣一種策略,我們令 \(1 \rightarrow n\) 的火車可以一趟走完而不停留,這一定是最優的。

感性的證明是,因為我們已經令去時最優了,而我們每令回來時減少 \(1\) 的代價,過去的時候就要增加 \(1\)

於是只需要分配回來的火車,我們首先稍微平移一下區間,使得回來的形狀類似豎直。

image

\(dp_{i,j}\) 表示在第 \(i\) 行,剛剛來到位置 \(j\) 時,最小花費時間。

上圖的紅色部分顯然是 \(0\)

其他部分的轉移形如: \(dp_{i,j}=dp_{i+1,k}+(k\rightarrow j)\)

\(s_{i,j} = dp_{i,j}-j\),我們有:

\(s_{i,j}=s_{i+1,k}+[k>j]\cdot len\)

事實上,我們只需要拯救那些被限制的點就可以了。只轉移最后被限制的位置 \(+1\) 的位置即可。使用線段樹維護答案,時間復雜度為 \(O(n\log n)\)

[AGC012E] Camel and Oases

Difficulty: \(\color{brown}{3490}\)

小清新的題。

\(dp_S\) 表示用了集合為 \(S\) 的操作最遠走到哪里,容易得到一個 \(O(n\log V)\) 的做法。

對於多次的詢問,容易發現只有 \(\log V\) 個合法的區間,於是做完了。

[AGC013D] Piling Up \(\star\)

Difficulty: \(\color{red}{3089}\)

膜拜 cdz !!!

首先能想到一個 dp ,記 \(dp_{i,j}\) 表示拿了 \(i\) 個求,盒子里裝了 \(j\) 個紅球的答案。

但是我們其實不關心盒子里的情況,我們只關心轉移的路徑,如果這個相同就說明是相同的取出序列。

那么欽定必須走到底就可以了。

\(O(nm)\)

[AGC013E] Placing Squares

Difficulty: \(\color{brown}{3475}\)

等價於每個區間分別選兩個點。

考慮轉移,令 \(dp_{i,0/1/2}\) 表示位置 \(i\) 然后選了幾個位置就有轉移:

沒有 \(\text{star}\) 的:

\[[dp_{i,0},dp_{i,1},dp_{i,2}] \begin{bmatrix}1&2&1\\1&1&1\\1&0&0\end{bmatrix} = [dp_{i+1,0},dp_{i+1,1},dp_{i+1,2}] \]

\(\text{star}\) 的:

\[[dp_{i,0},dp_{i,1},dp_{i,2}] \begin{bmatrix}1&2&1\\0&1&1\\0&0&0\end{bmatrix} = [dp_{i+1,0},dp_{i+1,1},dp_{i+1,2}] \]

然后維護矩陣冪就好了。

[AGC014E] Blue and Red Tree

Difficulty: \(\color{brown}{3312}\)

暴力用 \(set\) 啟發式合並即可解決。

[AGC015D] A or...or B Problem

Difficulty: \(\color{orange}{2655}\)

考慮 \(l,r\) 的最高位,如果相同,顯然可以一起去掉。

考慮 \(l=1\) 的情況,容易發現可以構造出任意最高位小於等於 \(r\) 的數。

否則相當於可以構造的數中間挖掉一塊。遞歸下去即可。

[AGC015E] Mr.Aoki Incubator

Difficulty: \(\color{brown}{3571}\)

容易知道最后點一定按 \(v\) 排序。

觀察題目,容易得到:點按照 \(v\) 排序后,每條線覆蓋都形如一個區間。

一個點的區間兩端就是它左右的運動速度相對最大的能相交的點。

另外容易發現相交的區間一定隨着你選擇的點移動而移動,做個 \(dp\) 就行了。

[AGC016D] XOR Replace \(\star\)

Difficulty: \(\color{red}{2910}\)

手玩一下,可以發現:

任意時刻,序列中數字構成的集合 都是 初始數字和它們的異或和構成的集合 的子集。

如果一開始把所有數字的異或和放在最后,那么一次操作就相當於交換某個位置和最后一個位置。

那么我們就只需要求解這個更加簡單的問題了:

考慮如果序列是個排列,那么包括最后一個位置的環的貢獻是 \(len-1\) ,否則就是 \(len+1\)

序列的情況類似,隨便討論一下就好了。

[AGC016E] Poor Turkeys

Difficulty: \(\color{red}{3029}\)

我們考慮維護集合 \(S_i\) 表示為了 \(i\) 存活,哪些雞在此之前應該活着。(給它擋刀)

考慮這樣一種維護方法,對於一只火雞 \(x\),如果此時 \(a,b\) 需要被處決一個,我們討論:容易得到,如果 \(a,b\) 都在 \(S_x\) 中,那么 \(x\) 一定無法存活;否則如果有一方存在,則加入另一方。

考慮 \(x,y\) 如果都存活,那么它們的集合必須沒有交,此時會發現這個條件充分而必要。

[AGC016F] Games on DAG

Difficulty: \(\color{gray}{3754}\)

容易發現題目等價於令 \(SG_1\not=SG_2\)

我們設 \(dp_{S}\) 表示目前集合 \(S\) 之間的邊沒確定,且它們目前的 \(SG\) 值一致,直接 dp 即可。

\(O(3^n)\)

[AGC017D] Game on Tree \(\star\)

Difficulty: \(\color{goldenrod}{2156}\)

典中典不會思維題,枯了。

大膽猜想一棵樹的 sg 是它所有子樹的 sg 加一的異或和,容易發現正確。

如何發現這個結論?

首先考慮根向下拉鏈的情況,容易發現這個等價於 nim 。

如果一個樹的 sg 已經定下來了,就可以把它變成一條鏈。於是這個結論就非常顯然了。

[AGC017E] Jigsaw \(\star\)

Difficulty: \(\color{red}{3158}\)

比較簡單的 \(\text{E}\) 題,雖然我還是不會做。

容易使用一條邊描述一個積木,相當於右側的接口從某個變成了另外一個。

我們只需找到若干條首尾都合法的路徑拼起來就行了。

現在考慮到有些點不能作為出發點,有些點不能作為結束點,也就是對它們的出入度數進行了限制,即 入度必須不大於出度/入度必須不小於出度 。

為什么這樣就一定能找到合法路徑呢,建立一個虛點用來補充出入度不相等的點,找到歐拉回路以后刪掉虛點,容易發現合法。

另外需要排除形成環的情況。如果一個弱連通塊的每個點都出入度平衡則只能形成環,需要排除。

時間復雜度 \(O(n)\)。因為只需要判斷,所以實現也非常簡單。

[AGC018D] Tree and Hamilton Path \(\star\)

Difficulty: \(\color{orange}{2757}\)

典中典不會思維題,枯了。

考慮哈密頓回路的情況,容易想到一條邊的貢獻是兩邊子樹 \(size\)\(\min\) 的兩倍。

現在考慮刪掉一條邊。

有一個非常強的性質,就是刪掉的邊一定經過重心,且任何一個經過重心的邊都可以刪掉。

如果想到了這個限制就蠻好證明了,這里略去。

於是做完了。

[AGC018E] Sightseeing Plan \(\star\)

Difficulty: \(\color{gray}{3953}\)

有點復雜的題目,但是思考過程很直接。

首先考慮只有兩個矩形的情況:

我們考慮從某個點出發會怎么樣:

\[\sum_{i=X_0}^{X_1} \sum_{j=Y_0}^{Y_1} \binom{i+j}{i} \\ =\sum_{i=X_0}^{X_1} (\binom{i+Y_1+1}{i+1}-\binom{i+Y_0}{i+1}) \\ =\sum_{i=X_0}^{X_1} (\binom{i+Y_1+1}{Y_1}-\binom{i+Y_0}{Y_0-1}) \\ = \binom{X_1+Y_1+2}{Y_1+1}-\binom{X_0+Y_1+1}{Y_1+1}-\binom{X_1+Y_0+1}{Y_0}+\binom{X_0+Y_0}{Y_0} \]

容易發現等價於 \((X_1+1,Y_1+1)+(X_0,Y_0)-(X_0,Y_1+1)-(X_1+1,Y_0)\)

這里括號的意義是走到一個離自己這么多距離的點的方案數。

容易發現對於任何一個點,它對應的四個點的坐標都是一致的。

我們現在考慮三個矩形的情況,從第二個矩形枚舉一個點,然后分別對應到第一個矩形和第三個矩形,組合出 \(16\) 種情況計算一下貢獻,\(O(n^2)\) 且常數巨大,過不了。

注意到我們本質上是枚舉中間的點計算合法路徑數,考慮轉而枚舉路徑計算結果的合法中間點數。

我們把一條路徑的合法點數拆開,進入時計算一次,出去時計算一次。這樣我們就只需要分別枚舉 \(O(n)\) 個入點和出點了。

[AGC019F] Yes or No \(\star\)

Difficulty: \(\color{gray}{3742}\)

小巧的數學題。

考慮放到坐標軸上,你會發現除了一定能拿到 \(\max(n,m)\) 的貢獻,只要經過了 \(x=y\) 的線,你就能拿到 \(\dfrac{1}{2}\) 的貢獻。

模擬即可。

[AGC018F] Two Trees \(\bigstar\)

挺好玩的講課題。

考慮使用圖論描述條件。

對於兩棵樹上的對應點,我們連一條不限流量的無向邊。

對於樹邊,我們連一條流量為 \(1\) 的無向邊,額外在兩棵樹的根上連一條流量為 \(1\) 的無向邊。

這樣,如果我們可以用一個歐拉回路構成這張圖,就說是有解的。

具體的,第一棵樹的點連向第二棵樹的對應點的流量即為權值,樹邊代表着子樹的權值和。

但是因為有不限流邊所以不好求歐拉回路,考慮如果不限流邊流量 \(>1\),那么我們可以抽出一個環把它反向,這樣就可以令流量 \(-2\)

因此不限流邊流量為 \(0/1\),由子樹大小的奇偶性決定。

求一次歐拉回路即可解決。\(O(n)\)

[AGC020D] Min Max Repetition \(\star\)

Difficluty: \(\color{red}{3062}\)

流淚了,為啥大家都覺得這題水啊/ll。

顯而易見的是,我們可以計算出第二個條件規定的長度,記為 \(l\)

如果 \(B\) 的數量比 \(A\) 多,則答案很顯然。

否則,我們認為答案的形式一定為:

\(\texttt{[AAABAAABAA] [BBBABBBABBB]}\)

這樣。雖然有點抽象,總之是只會由兩段組成。

二分答案即可 😦

[AGC021E] Ball Eat Chameleons

Difficulty: \(\color{gray}{3944}\)

注意到我們要計數放球的方案數,考慮假如我們已知放球的序列,如何構造使得合法。

記一個變色龍的貢獻是吃的紅球數減藍球數。那么一只變色龍要么產生 \(1\) 貢獻要么產生 \(0\) 貢獻,我們想盡量使得產生 \(0\) 貢獻的變色龍更多。

因為我們只想讓產生 \(0\) 貢獻的變色龍盡量多,所以欽定它們都是 紅+藍。注意到當 \(r=b\) 時可能不一定能欽定到,特殊處理 \(r=b\)

假設有 \(a\) 個變色龍產生 \(0\) 貢獻,\(b\) 個變色龍產生 \(1\) 貢獻,那必須紅球必須比藍球多 \(b\) 個。

我們把紅球記為 \(+1\),藍球記為 \(-1\)。考慮一個前綴,如果值為負,表示至少有這么多的藍球無法和紅球匹配,即紅球至少要比藍球多這么多。

注意到一開始每個變色龍都是藍色,因此即紅球數加前綴最小值大於等於 \(n\)

我們枚舉總和,記有 \(a+b\) 個紅球和 \(b\) 個藍球,那么相當於我們從 \((0,0)\) 走到 \((a+2b,a)\) 且不能越過 \(x=X\) 這條線。使用經典的翻折法計算答案即可。

[AGC022D] Shopping \(\bigstar\)

Difficulty: \(\color{gray}{3866}\)

感覺好強的題!

首先容易發現能令購物時間對 \(2L\) 取模。接下來就不會了。

有一個性質是:顯然答案只和列車走完全程的次數相關,因此這樣就只有 \(4\) 種點了。

首先,如果一個點無論從哪側進入都會從對面出來,那么不論如何都相當於列車走了一個全程。

另外,如果一個點從某個方向進入但會從同一個方向出來,那我們肯定想盡量這么做。

於是我們就能對左進左出和右進右出做匹配,每次匹配就能節約一輪。

這樣就做完了。

另外注意到這樣匹配本質上會導致下一輪的開始,因此需要留一個左進左出匹配起點。

欽定為最后一個點就可以了。

[AGC023D] Go Home \(\star\)

Difficulty: \(\color{red}{3173}\)

典中典不會思維題,枯了。

考慮最左側和最右側的人,容易發現人少的一定比人多的走得晚。

因此直接遞歸下去即可。

[AGC023E] Inversions \(\bigstar\)

Difficulty: \(\color{gray}{3653}\)

很有感覺的題,但是不太會做。

考慮計算方案數,記 \(cnt_w\) 表示 \(a_i\geqslant w\) 的數量,易得方案數為:

\[\prod_{i=1}^n (cnt_i - (n-i)) \]

枚舉兩個位置 \(i,j\),考察它們是否產生貢獻。

\(a_i\geqslant a_j\),考慮到如果 \(p_i>p_j\) 不會產生貢獻,可以令 \(a_i \rightarrow a_j\),則產生的貢獻是方案數的一半。

否則有 \(a_i < a_j\),容斥一下就等價於上面了。

現在的問題是,我們需要計算:

\[\sum_{i=1}^n\sum_{j=i+1}^n[a_i \geqslant a_j]f(a_i,a_j) \]

\(f(x,y)\) 表示把一個 \(a\)\(x\) 變成 \(y\),此時的方案數。

預處理,有 \(f(x,y)=w\dfrac{s_x}{s_{y}}\)

\[=w\sum_{i=1}^n\sum_{j=i+1}^n[a_i \geqslant a_j]\dfrac{s_{a_i}}{s_{a_{j}}} \]

樹狀數組維護即可。

[AGC023F] 01 on Tree

Difficulty: \(\color{red}{3148}\)

經典的貪心模型。

考慮能走 \(0\) 一定走 \(0\),於是每個點都可以打包成 \(x\)\(0\)\(y\)\(1\)

對於點 \(a,b\),我們分析決策順序的貢獻。

容易發現,只要:\(\dfrac{a_x}{a_y} \leqslant \dfrac{b_x}{b_y}\)\(b\) 就一定優於 \(a\)

這樣,我們每次把最優的點合並入它的父親就能得到答案。

[AGC024D] Isomorphism Freak

Difficulty: \(\color{goldenrod}{2307}\)

顯然首先考慮直徑,那么第一個答案顯而易見。

可以發現答案上界毛估估一下是中心連出邊的數量 * 最大子樹葉子數。

但是顯然不對。因為樹形態產生的影響比較大。

因此考慮分治,每次把兩個子樹合並並使葉子數量取 \(\min\) 。易於發現這是最優的。

考慮合並的過程,記 \(dp_{i,j}\) 是使子樹 \(i\)\(j\) 同構的葉子 \(\min\) 。考慮轉移。

顯然這個不會莫名其妙新增多余的子樹,因此二分圖匹配即可。

因為直徑為偶數時可能要換中心,所以總復雜度 \(O(n^4)\)

UPD:

發憨了。其實令直接深度相同的兒子數目相同即可。遠不需要二分圖匹配。

[AGC024E] Sequence Growing Hard

Difficulty: \(\color{red}{3001}\)

🕊

[AGC024F] Simple Subsequence Problem \(\star\)

Difficulty: \(\color{brown}{3544}\)

不會做,但感覺是人力能及的題人力不可及。

如果一個個枚舉答案字符串再檢查可以匹配多少給定字符串,感覺前途不大。

反過來匹配,考慮一次求出許多字符串的答案。

\(dp_{S1,S2}\) 為對於答案字符串集合,已經匹配的部分為 \(S1\) ,未被匹配的部為 \(S2\) ,其可以匹配的字符串集合大小。

形象的說,就是把一些字符串匹配的前一段算在了一起。

這樣直接 dp 即可解決問題。(子序列自動機)

[AGC025C] Interval Game

Difficulty: \(\color{goldenrod}{2077}\)

考慮雙方最優決策:

首先 A 肯定擺爛,走到最近的滿足條件的地方。

那么 B 的選擇方案就不可能讓 A 連續向一個方向走。

所以 A 軌跡類似於 左-右-左-右 這樣了。

也因此,兩邊線段內部的順序就不那么重要了。

顯然,右邊的線段只有左端點有用,左邊的線段只有右端點有用。

枚舉這個分界點,顯然可以 \(O(n+S)\) 求出答案。

排序復雜度 \(O(n \log n)\) ,總復雜度 \(O(n\log n + S)\)

[AGC025D] Choosing Points \(\star\)

Difficulty: \(\color{red}{2868}\)

感覺 nb 麻了。

這起碼是銅牌吧。

考慮只有一個限制的情況,可以發現這是一個二分圖。

感性的證明方法大概是發現不會出現奇環。

於是對兩個限制分別染色,根據抽屜原理容易選出答案。

[AGC025E] Walking on a Tree

Difficulty: \(\color{brown}{3584}\)

感覺比 D 反而簡單。

經典的分別考慮每條邊,猜個結論產生的貢獻是 \(\max(2,d)\) ,其中 \(d\) 是這條邊上的路徑數量。

證明非常顯然。

juju 隨便就切了 orz

[AGC025F] Addition and Andition \(\bigstar\)

Difficulty: \(\color{gray}{3936}\)

sto \(\text{s}\color{red}{\text{yzf2222}}\) orz 當場切

感覺比較 naive 但是自己想不到/ll

非常有 atcoder 風味的找規律題。

模擬工作的過程,可以發現有變化的位只有兩邊都是 \(1\) 的位和它的上一位。

然后容易發現兩個 \(1\) 會變成 \(0\)

所以手動模擬最高位的並排的 \(1\) ,然后后面的並排的 \(1\) 就相當於每次向上移了。

可以手玩一下輔助理解。

[AGC026D] Histogram Coloring

Difficulty: \(\color{orange}{2746}\)

對於每一行把顏色相同的相鄰位置並到一起然后從上往下 dp 即可。

容易發現一段如果紅藍相間則有兩種轉移方法,否則只能對上面取反。

[AGC026E] Synchronized Subsequence

Difficulty: \(\color{red}{3016}\)

感覺比較輕松的題目。

首先考慮把原串划分為若干個 \(a,b\) 數目相等的串,然后依次考慮每段。

對於一段 \(a\)\(b\) 前的段最優選法肯定形如 \(ababab\)

否則就要選擇一段前綴 \(b-a\) 數量最大的,考慮到這樣選一定是形如 \(bbbbbbaabaaabbaaaa\) 即一段長的 \(b\) 接一段亂序,然后這個亂序其實就是一組后綴。

找到最優的后綴然后貪心選就行了。

[AGC026F] Manju Game \(\star\)

Difficulty: \(\color{gray}{3704}\)

考慮對長度的奇偶性討論。

首先感性的,如果在一次操作后自己失去了先手肯定不優秀。

具體的,這個策略肯定劣於在端點取。

因此對於 \(n\) 為偶數,最優的策略一定是在一端取。

接下來考慮 \(n\) 為奇數:

首先肯定是在偶數位置取,接下來后手可以選擇另外一側的奇數位置拿走。

然后在某個時刻先手就可以選擇直接拿走奇數位置走人。

於是先手就能得到一段偶數位置+奇數位置+偶數位置。

那么考慮二分先手能取得的貢獻大小 \(w\) ,然后用偶數位置把序列分開,要求任何一段產生的額外貢獻都大於 \(w\) 即可。

[AGC027D] Modulo Matrix

Difficulty: \(\color{red}{2984}\)

直接按對角線討論即可。

[AGC027E] ABBreviate \(\bigstar\)

Difficulty: \(\color{gray}{3634}\)

套路的考慮給定 \(S\)\(T\) 問能否表示。

首先找到一個粗略的估計條件。

分別給 \(A,B\) 賦值為 \(1,2\) ,容易得到每次操作后序列 mod 3 的值不變。

這樣,貪心的把 \(S\) 的最短的一個前綴變成 \(T\) 的一個字母,如果剩余的 \(S\ mod\ 3 = 0\) 就可行。

注意判斷一開始就動不了的情況。

那么我們可以方便的判斷兩個串能否相互轉化了,且容易發現上面的轉化方式最優。

因此直接使用上述方法進行 dp 即可解決此題。

Almost similar: ARC110E

[AGC027F] Grafting \(\bigstar\)

Difficulty: \(\color{brown}{3544}\)

感覺巨大nb的題。

遇到這種題可能感覺難以下手,因為決策的性質太爛了。

那么首先要確定一個根:

考慮唯一一個可以用的性質,一個點只能移動一次。

於是我們枚舉移動的點,然后它就固定了。

這樣我們得到了一個 root 。

因為一個點只會移動一次,那么移動的位置都固定了,因此我們只要關心移動的順序。

所以只需要用拓撲排序維護移動順序即可。

[AGC028C] Min Cost Cycle

Difficulty: \(\color{orange}{2463}\)

以為是什么高妙自動機,發現是搜索/kk

直接折半搜索即可通過。

[AGC028E] High Elements

Difficulty: \(\color{gold}{4145}\)

稱一個元素是好的,當且僅當它在原序列是前綴最大值。

我們嘗試一個個將元素插入,容易知道插入好的元素一定有貢獻,且任何時候兩個序列的頂端至少有一個是好的。

貪心的把元素放入第一個序列里,接下來只需考慮能否擺放之后的元素令有合法解。

容易發現,我們可以令之后的元素中,某一側只有好的元素有貢獻。

接下來的一步有點感覺,假設 \(A\) 側需比 \(B\) 側多放 \(x\) 個,接下來還有 \(w\) 個好元素,我們欽定 \(A\) 側有 \(t\) 個非好元素產生貢獻,\(s\) 個好元素產生貢獻。就有:

\[x=t+s-(w-s)\\ 2s+t=x+w \]

注意到 \(x+w\) 是常數,只需考慮能否在之后的元素中選出合適的 \(2s+t\) 即可。

計算出以每個元素作為開始能否選出貢獻為 \(v\) 的元素即可。

注意到我們可以通過【減少一個好元素】的方式調控這個貢獻。於是只需對奇偶的情況分別維護最大貢獻就好了。

[AGC029D] Grid game

Difficulty: \(\color{goldenrod}{2033}\)

容易發現高木每輪必須移動。

直接 dp 即可解決。

[AGC029E] Wandering TKHS \(\star\)

Difficulty: \(\color{red}{3088}\)

感覺挺有意思的題目。

枚舉每個節點開始移動,容易做到 \(O(n^2\log n)\)

考慮經典的套路,重復利用之前的信息。

對於一個點 \(x\) ,記 \(1 - x\) 之間的最大編號節點為 \(w_x\),離 \(w_x\) 最近的 \(x\) 一側的點是 \(d_x\)

我們有 \(Ans_x=Ans_{d_x}\),具體的,考慮到這兩個點都被 "關在了最大值為 \(w_x\) 的一個區域中",它們在突破 \(w_x\) 之前一定都會走滿這個區域,而往 \(w_x\) 方向的答案可以在 \(w_x\) 處就計算出。

\(w_x - 1\) 的路徑上(不含 \(w_x\))的最大值為 \(S\),那么 dfs 一次 \(w_x\) 內部一側的點即可得到 \(w_x\) 內部的答案,而外部的答案可以通過 \(w_{w_x}\) 的答案得到。

於是只需要對每個能成為 \(w_x\) 的點向下找到能到達的所有位置即可。

容易發現,整棵樹只會被累計搜索一次。

均攤 \(O(n)\)

[AGC030D] Wandering TKHS

Difficulty: \(\color{orange}{2602}\)

感謝周指導的指導。

直接 dp 即可解決。

[AGC030E] Less than 3 \(\star\)

Difficulty: \(\color{gray}{3753}\)

如果我們把相同的數字合並到一起,那么這個操作不會在中間插入一個新的段。

插入一個新的段只能在兩端。

枚舉一下匹配的情況就行了,復雜度 \(O(n^2)\)

[AGC030F] Permutation and Minimum \(\star\)

Difficulty: \(\color{brown}{3474}\)

考試題。

順便記錄一下。

首先去掉 \((x,y)\) 的,記 \((x,-1),(-1,x)\)\(a\) 個,\((-1,-1)\)\(b\) 個。

考慮從大往小填,設 \(dp_{i,j,k}\) 表示填了 \([i,n]\) ,目前有 \(j\)\((-1,-1)\) 以及 \(k\)\((-1,x)\ \ (x<i)\)

直接轉移即可。

[AGC031D] A Sequence of Permutations \(\bigstar\)

Difficuly: \(\color{red}{2975}\)

首先記排列的復合為 \(\circ\) ,那么有 \(F(a,b)=b\circ a^{-1}\) 。以下會省略這個符號。

玩出前若干項得到:

\[a_1=p\\ a_2=q\\ a_3=qp^{-1}\\ a_4=qp^{-1}q^{-1}\\ a_5=qp^{-1}q^{-1}pq^{-1}\\ a_6=qp^{-1}q^{-1}p^2q^{-1}\\ a_7=qp^{-1}q^{-1}pqpq^{-1}\\ a_8=qp^{-1}q^{-1}pqp^{-1}qpq^{-1}\\ a_9=qp^{-1}q^{-1}pqp^{-2}qpq^{-1}\\ a_{10}=qp^{-1}q^{-1}pqp^{-1}q^{-1}p^{-1}qpq^{-1}\\ \cdots \]

(充滿勇氣的)寫下去,然后到這里應該能發現規律了。

首先值得注意的是容易發現一個不變的前綴形如:

\(q,qp^{-1},qp^{-1}q^{-1},qp^{-1}q^{-1}p,qp^{-1}q^{-1}pq\dots\)

這個東西是循環 \(qp^{-1}q^{-1}p\) 的。

另外寫到一定長度以后也能發現后綴的循環節,是 \(p^{-1}qpq^{-1}\)

綜合這兩個規律直接得到 \(a_{x}=(qp^{-1}q^{-1}p)(a_{x-6})(p^{-1}qpq^{-1})\)

[AGC031E] Snuke the Phantom Thief

Difficulty: \(\color{silver}{3689}\)

考慮流。

首先如果只有 1,3 限制,有一個經典的建模,就是直接把點放在坐標系上,x 軸向點連,點向 y 軸連。
現在考慮有 2,4 操作,我們只需要枚舉一共拿了多少個,就可以轉化成上下界的形式。

以上是口胡。

另外一種做法並不需要上下界,我們枚舉一共拿了多少個,考慮一維的情況。

事實上限制 " \(x\) 坐標小於等於 \(a_i\) 的最多拿 \(b_i\) 個 " 等價於我們對 \(x\) 排序后,\(b_i+1\) 之后拿的 \(x\) 坐標必須大於 \(a_i\)

類似的限制 " \(x\) 坐標小於等於 \(a_i\) 的最多拿 \(b_i\) 個 " 這種條件。

對於二維的情況,我們將對 \(x\) 排序的數組與對 \(y\) 排序的數組進行匹配。把點放中間向兩邊連即可。

[AGC032E] Modulo Pairing

Difficulty: \(\color{brown}{3402}\)

弱智題。

二分分界點,每邊紀念品分組。

[AGC033D] Complexity \(\star\)

Difficulty: \(\color{red}{2958}\)

大套路題,但是我不會。

考慮一個朴素的 dp 即 \(dp_{a,b,c,d}\) 表示一個矩形的凌亂度,然后用二分大力轉移。

這樣就是 \(O(n^4\log n)\)

容易發現凌亂度只有 \(\log\) 級別,最多只有 \(16\)

\(dp_{a,b,c,k}\) 表示行 \([a,b]\) 左列為 \(c\) 時,右列的最大值滿足凌亂度最多為 \(k\)

考慮轉移,如果是橫向的合並則可以 \(O(1)\) ,縱向合並的話,鵺可以二分。

因此 \(O(n^3\log^2 n)\)

[AGC033E] Go around a Circle

Difficulty: \(\color{red}{3103}\)

一眼上去好像很不可做的樣子。

發掘一下性質,首先不妨設開頭是 \(R\),那么環上顯然不能有 \(BB\)

假如開頭是 \(RB\),那么環上還不能有 \(RRB\) 或者 \(BRR\)。容易發現此時滿足條件的環只有 \(BRBR\dots\) 或者 \(RBRB\dots\)。顯然這兩個環滿足任意條件,即答案為 \(2\)

接下來討論開頭由 \(a\)\(R\) 和一個 \(B\) 的組成會產生什么影響。

假設 \(a=2k+1\),那么就要求連續的 \(R\) 段的長度必須要是奇數,而且長度不超過 \(2k+1\)

假設 \(a=2k\),那么連續的 \(R\) 段的長度必須要是奇數,而且長度不能超過 \(2k+1\)

考慮到在第一個 \(B\) 以后你一定能走到環上的 \(B\) 旁邊,所以對於后面的 \(R\) 連續段,假如長度為奇數相當於再次限制了環上連續 \(R\) 的長度,否則沒有限制。

那么直接 \(dp\) 即可解決。

[AGC034D] Manhattan Max Matching

Difficulty: \(\color{gray}{3665}\)

最近總是做不出大套路題,看來需要加深做題和討論了。

拆開曼哈頓距離的柿子然后大力費用流即可。

[AGC034E] Complete Compress

Difficluty: \(\color{orange}{2637}\)

直接枚舉中心點在哪即可做到 \(O(n^2)\),換根可以 \(O(n)\)

[AGC035D] Add and Remove \(\bigstar\)

Difficulty: \(\color{red}{2902}\)

找到被 AGC 亂殺的感覺了。

考慮一個容易想到的 \(dp\) ,即記 \(dp_{l,r,a,b}\) 表示消除 \([l,r]\) 后左邊產生 \(a\) 倍貢獻右邊產生 \(b\) 倍貢獻,這種情況的最小值,轉移只需枚舉最后一個被消除的位置。

結論是狀態總數只有 \(O(n2^n)\) 級別。

考慮到 \(a,b\) 都只和另外一側是否產生貢獻有關,感性理解一下確實很對。

具體的說,在枚舉一個

🕊

[AGC035E] Develop \(\star\)

Difficulty: \(\color{gray}{3720}\)

考慮一個這樣的事,假設我們想刪除一些點,如果它們的轉化關系構成了環則顯然無法刪掉。否則我們就可以按照拓撲序刪除。

那么,不妨考慮如何才會構成環。一種情況是 \(k\) 為偶數,此時只有奇偶性相同的數字之間才可能構成環。於是可以令 \(k \rightarrow k/2\),那么條件就等價於你不能選 \(k+1\) 個連續的數字,可以簡單計算。

類似的,對於 \(k\) 為奇數,我們也能記下偶數的連續數量和奇數的連續數量,直接轉移即可 \(O(n^3)\)

[AGC036D] Negative Cycle \(\bigstar\)

Difficulty: \(\color{brown}{3326}\)

感覺非常強的題。

考慮使用一個差分約束來描述這個問題,那么我們需要給每個位置分配一個權值,然后如果某條邊不符合這個權值情況就刪掉。

首先要滿足 \(0\) 邊的條件即 \(a_i\leqslant a_{i+1}\)

\(p_i=a_{i-1}-a_{i}\) ,那么取得貢獻的要求就是:

取得 \(i \stackrel{1}\longrightarrow j\) 的權值當且僅當 \(a_i+1\geqslant a_j\)\(p_i+\cdots +p_{j-1}\leqslant 1\)

取得 \(i \stackrel{-1}\longrightarrow j\) 的權值當且僅當 \(a_i-1\geqslant a_j\)\(p_i+\cdots +p_{j-1}\geqslant 1\)

容易發現 \(p\) 的最優取值只有 \(\{0,1\}\) ,然后發現轉移只和之前的兩個 \(1\) 有關,因此考慮 \(dp\) 並記下之前 \(1\) 的出現位置就行了。

實現精細一點能做到 \(O(n^3)\)

[AGC036E] ABC String \(\bigstar\)

Difficulty: \(\color{gray}{3783}\)

非常神秘的一個題!!

注意到可以把相同的字符合並到一起,那么此時記 \(cnt_{s}\) 表示字符 \(s\) 的出現次數,方便起見,令 \(cnt_a \leqslant cnt_b \leqslant cnt_c\)

接下來,容易發現最優解能保留 \(3cnt_a\) 個字符,我們嘗試構造它。首先保留所有的 \(a\),那么字符串就被分成了 \(cnt_a+1\) 個部分,每個部分要么只有 \(b\),記數量為 \(w_1\),要么只有 \(c\),記數量為 \(w_2\),要么都有,記數量為 \(w_3\)

   結論:如果$w_1+w_3 \geqslant w_2$,則能做到保留 $cnt_a$ 個字符。

事實上,從感性上就易於得到該結論。下面給出簡略的證明。

我們嘗試找到一種逐漸刪除字符串一些元素的方法,最后得到我們需要的解。

首先,我們嘗試令 \(cnt_b=cnt_c\)

對於一個 \(b,c\) 都存在的段,它一定形如 \(bcbcbc\cdots / cbcbcbc \cdots\)

接下來,對於一個這樣的串,我們就把它變成 \(ABCBCBA\),直到 \(cnt_b=cnt_c\)。注意到每個含有 \(b,c\) 的串,我們都有 \(1\) 的貢獻,而 \(w_1+w_3\geqslant w_2\),所以一定能達成。

接下來我們就能刪掉連續的 \(BC/CB\) 直到 \(cnt_a=cnt_b=cnt_c\),這樣我們就完成了構造。

對於不滿足上述結論的情況,我們就需要刪除一些 \(A\)。最優的做法顯然是打破只含有 \(C\) 的間隔。

[AGC038D] Unique Path

Difficulty: \(\color{orange}{2628}\)

感覺萌題。但是我不會 /ll

大致思路是考慮 \(0,1\) 的傳遞性,然后先合並 \(0\) 邊並分類討論。

[AGC038E] Gachapon \(\star\)

一眼 min-max 容斥,假如我們直接 min-max 容斥,就要考慮一個子集的 \(\min\) 答案。

對於某個子集,可以用一個系數描述集合之外的貢獻,接下來只需直接統計此集合的答案。枚舉選擇的次數,統計截止次數之前還沒有取到答案的方案數,可以使用 \(dp\) 解決。

另外也可以使用生成函數方法。記 \(P_i=\frac{a_i}{S}\)。首先容易發現這是一個序列拼接模型,我們首先描述某個數字序列的生成函數。因為要求出現次數大於等於 \(B_i\),可以得到生成函數為:

\[F_i(x)=\sum_{j=B_i} \dfrac{(xP_i)^j}{j!}\\ =e^{xP_i}-\sum_{j=0}^{B_i-1} \dfrac{(xP_i)^j}{j!} \]

我們所求即為 \(\prod_i F_i(x)\),表示某個回合已經結束的概率。

因為輪數可能非常大,直接乘肯定不行,要帶着 \(e\) 跑。我們 \(dp\) 算出 \(e^{n}{S}\) 的系數 \(G_n(x)\),接下來就可以表示答案了。

\[Ans=\sum_{i=0}(1-i![x^i](\sum_j e^jG_j(x))) \]

對於無限求和式,一般的做法是把限制更大的交換求和次序至后面單獨處理。但在此之前,先讓我們消去常數。

\[=\sum_{j=0}^S\sum_{i=0}(1-i![x^i]e^\frac{j}{S}G_j(x))\\ =\sum_{j=0}^S\sum_{i=0}(1-i!\sum_{k=0}^i\dfrac{g_{j,k}(\frac{j}{S})^{i-k}}{(i-k)!})\\ =-\sum_{j=0}^{S-1}\sum_{i=0}(i!\sum_{k=0}^S\dfrac{g_{j,k}(\frac{j}{S})^{i-k}}{(i-k)!})\\ =-\sum_{j=0}^{S-1}\sum_{k=0}^Sg_{j,k}(\frac{j}{S})^{-k}k!\sum_{i=0}(\frac{j}{S})^{i}\binom{i}{k}\\ \]

有這樣的組合恆等式:

\[\sum_i a^i\binom{i}{b}=\dfrac{1}{(1-ax)^{n-b+1}} \]

於是就可以快速計算了。

[AGC039E] Pairing Points \(\star\)

Difficulty: \(\color{brown}{3430}\)

比較神秘的 dp 題。

[AGC040F] Two Pieces \(\bigstar\)

Difficulty: \(\color{blue}{\texttt{?}}\)

容易想到拍到二維平面上,那么操作大概是下圖的樣子:

image

那么就是要從 \((0,0)\) 走到 \((A,B)\) 而且要求步數為 \(n\)

假如只有紅色操作顯然是卡特蘭數,但是如果加上藍色操作會導致難以描述目前消耗的步數以及位置。

注意到紅色操作永遠不能碰到線 \(x=y\) ,現在考慮一個和藍色操作等價的操作,即把限制不能超過的那條 \(x=y\) 的直線拉到自己這里來,那么以后的行動軌跡就不能碰到它。

這樣如果我們枚舉最后一次使用藍色操作的位置,那一方面我們可以知道此時終點的位置,另一方面還能知道藍色操作的使用次數。

考慮另外一方面,即因為紅色操作不能碰到分界線,所以藍色操作一定是一起做的,又知道藍色操作的總次數,因此答案即:紅色操作的形態(折線法)乘以藍色操作的使用情況,插板法解決即可。

[AGC041D] Problem Scores \(\bigstar\)

Difficulty: \(\color{red}{3096}\)

感覺很強的題目。

首先肯定轉化為前一半比后一半的答案更大。

接下來如果正常的做應該只能做到最優 \(O(n^2\ln n)\)

現在考慮轉化為每次進行后綴減,然后算出會產生的貢獻,相當於做背包。

容易發現背包容積是 \(n\) ,所以隨便做力。

[AGC041E] Balancing Network

Difficulty: \(\color{brown}{3502}\)

小清新分討,感覺 easy 。

首先考慮更簡單的 \(T=2\) ,容易想到只維護三個位置即可。

對於 \(T=1\) ,壓 \(64\) 位暴力模擬即可。

[AGC043D] Merge Triplets \(\star\)

Difficulty: \(\color{orange}{2708}\)

感覺很強的題目。

首先考慮到每個序列內都可以按照前綴最大值划分成若干個段,而容易發現這些段在最終的序列內都是連續的。

如果我們已經決定好段的樣子,那么不用管它們拼接的方法,最終生成的序列都是一致的。

因此直接對這個東西 dp 即可。

\(O(n^2)\)

[AGC044C] Strange Dance \(\bigstar\)

Difficulty: \(\color{red}{2889}\)

膜拜 xzy !!!

容易想到使用 dp 解決。

提供另外一種思路:

考慮用一顆 trie 維護每個位置,滿足一個位置的值相當於根到它的路徑 \(\text{reverse}\) 后的值。

那么操作分別相當於:交換子樹 1/2 並打上 tag ,或者輪換子樹然后向子樹 \(0\) 遞歸。

直接維護即可。

[AGC044D] Guess the Password \(\star\)

Difficulty: \(\color{red}{3165}\)

好玩題。

容易得到每個字符的出現次數,現在考慮如何得到答案。

每次選取 size 最小的兩個合並到一起就行了。

[AGC044E] Random Pawn \(\bigstar\)

Difficulty: \(\color{brown}{3599}\)

好 nb 的題目,記錄一下。

\(a_i\) 最大處斷環成鏈。

容易發現一個點的決策無論目前的花費都只有一種。

不妨先決策哪些點是停留,記這些點 \(is_i=1\) ,那么一個點的答案就是:

\[ans_i= \begin{cases} a_i&is_i=1\\\\ \dfrac{ans_{i-1}+ans_{i+1}}{2}-b_i&is_i=0 \end{cases} \]

不妨令 \(b_i=0\)

考慮 \(is_x=1,is_y=1\)\(\forall i\in(x,y)\ is_i=0\) ,容易發現:

\(\forall i\in[x,y]\ ans_{i}=\dfrac{a_x(y-i)+a_y(i-x)}{y-x}\)

具體的說,就是 \(ans_{i}\) 是過 \((x,a_x)\)\((y,a_y)\) 兩點的直線, \(x=i\)\(y\) 的值。

於是只需要選出一個上凸殼即可。

那么對於 \(b_i\not = 0\) 只需要給每個位置一個偏移使得滿足條件即可。

記這個偏移為 \(c_i\) 就能列出如下柿子:

\[ans_i-c_i= \begin{cases} a_i&is_i=1\\\\ \dfrac{ans_{i-1}+ans_{i+1}}{2}-b_i-\dfrac{c_{i-1}+c_{i+1}}{2}&is_i=0 \end{cases} \]

只需滿足對於 \(is_i=0\)\(i\)\(c_i-\dfrac{c_{i-1}+c_{i+1}}{2}=b_i\) 即可。

於是令 \(c_1=c_2=0\) 之后遞推即可。

[AGC044F] Name-Preserving Clubs \(\star\)

魔怔題。

先考慮不存在成員相同俱樂部的情況,讓我們首先求出 \(k\)

我們稱一個 \(n\times m\)\(\texttt{01}\) 矩陣是好的,當且僅當:不存在兩行相同;任意排列它的行和列,不能得到原矩陣。

對一個 \(m\),最小的好的矩陣對應的 \(n\) 即是我們要求的 \(k\)

現給出幾個顯然的結論:

若存在一個 \(n\times m\) 的好矩陣,那么:

存在一個 \(m\times n\) 的好矩陣;
存在一個 \(n\times (2^n-m)\) 的好矩陣。

\(c(n,k)\) 表示好 \(n\times k\) 矩陣的數量,我們也有:

\(c(n,k)=c(k,n)=c(2^k-n,k)\)

\(g(n)\) 表示 \(k\) 對應的最小 \(n\)

由結論知 \(2^{g(n)}-n \geqslant g(g(n))\)

\(G(n)\) 表示滿足上述條件的最小函數。

我們給出結論:

\(G(n)=g(n)\),一個好的 \(k \times n\) 矩陣存在等價於 \(k\in[g(n),2^n-g(n)]\)

歸納證明。

首先對於 \(n\),我們只需證明對於 \(k\in[g(n),2^{n-1}]\) 都存在好矩陣。

對於 \(k\in[g(n),n)\),等價於存在一個 \(n\times k\) 的好矩陣,根據歸納成立。

對於 \(k\in[n,2^{n-1}]\),我們以如下方式構造一個 \(k \times n\) 的矩陣:

對於前 \(n-1\) 行,把第 \(\{\{1\},\{1,2\},\{2,3\},\cdots,\{n-2,n-1\}\}\) 列的位置塗黑。

對於其他的行,我們至少塗黑三個列,但是保證不與其它行重復。易證至少能有 \(2^{n-1}\) 個可區分的不同列。

接下來,我們關注如何計算 \(c(g(n),n)\)

事實上,對於滿足 \(6 \leqslant k=g(n) \leqslant n \leqslant 2^{n-1}\),我們都有 \(c(k,n)>10^3\)

我們考慮如下的兩個 \(n\times k\) 矩陣,第一個矩陣的前 \(k-2\) 行形如 \(\{\{1,2\},\{2,3\},\cdots,\{k-2,k-1\}\\}\),第二個矩陣的前 \(k-1\) 行如第一個矩陣取反。

接下來的 \(n-k+2\) 行,只需被塗黑的列數不是 \(2/n-2\) 即可,所以方案數至少有 \(2\binom{2^k-2\binom{k}{2}}{n-k+2}\) 種。

所以 \(c(6,6)\geqslant 2\binom{34}{2}=1122>1000\)

對於 \(n \leqslant 5\) 的情況暴力計算。

考慮如果有相同的俱樂部,假設有 \(h\) 個不同的俱樂部,我們有成員數不多於 \(2^h\)

因此在有相同俱樂部時,設共有 \(k\) 個俱樂部,有 \(2^{k-1} \geqslant n\),實際上經過驗證 \(g(n)\) 約為 \(\log_2 n\) 級別,有 \(k \geqslant g(n)\)

我們可以斷定 \(g(n)\) 也是在俱樂部可以相同情況下的最小答案。

計算方案,如果 \(k=g(n)\),有 \(2^{g(n)-1} \geqslant n\),此時當且僅當 \(n=4/7/8\) 答案才可能不大於 \(1000\),手玩出來。

[AGC045B] 01 Unbalanced \(\star\)

Difficulty: \(\color{red}{2873}\)

考慮 dp ,記錄下當前的后綴最大 \(0-1\) 值和 \(1-0\) 值。

容易發現 dp 的過程相當於在網格圖上行走。

image

你需要走到的最遠點離原點的切比雪夫距離最近。

二分答案,容易發現從原點出發相當於從對角線的任意一點出發。

維護一個可行區間,對於 \(0\) 向左移, \(1\) 向右移, \(?\) 左右取並即可。

[AGC045C] Range Set \(\star\)

Difficulty: \(\color{orange}{2758}\)

感覺比較困難的題。

依然可以套路的考慮如何構造一個指定的序列。

首先可以發現 \(0/1\) 相互對,因為容易染成全 \(0/1\)

\(a>b\) ,那么如果某個時刻出現了長度 \(\geqslant a\)\(0\) 子串就一定能到達,證明顯然。

那么對於一個序列,貪心把所有長度 \(\geqslant b\)\(1\) 串染成 \(0\) ,判斷上面的條件是否成立即可。

容斥后容易使用 \(dp\) 計數,轉移比較復雜。

[AGC045D] Lamps and Buttons \(\star\)

Difficulty: \(\color{gray}{3625}\)

首先每個燈向它控制的燈連一條邊。

考慮 \(m=1\) ,那么容易發現如果形成了大小為 \(n\) 的環就可行,否則不行。

進一步考慮 \(m\) 更大的情況:

我們枚舉 \([1,m]\) 第一個滿足 \(p_i=i\) 的位置,記為 \(x\)

然后就需要 \([1,x)\) 都不滿足 \(p_i=i\) 而且每個環里面都有至少一個 \([1,m]\) 的元素。

考慮先一步容斥掉 \([1,x)\) 之間滿足條件的點個數來消除第一個條件,接下來題目相當於:

有一張圖,你需要依次加入 \(x+y+z\) 個點。

每次加入點可以插入一個自環或者插在某條邊中間。

然后中間的 \(y\) 個點插入時不能是自環。

\(x\) 個點對應 \([1,x)\) ,中間的 \(y\) 個點相當於 \((m,n]\) ,然后最后 \(z\) 個點就對應了 \((y,m]\) 這些點。

注意容斥選定的點時不能計入 \(x,y,z\) 三個集合中。

這樣得到的貢獻就是:

\[x!\ \times\ \dfrac{(x+y-1)!}{(x-1)!}\ \times \dfrac{(x+y+z)!}{(x+y)!} \]

於是只需要枚舉 \(x\)\([1,x)\) ,復雜度 \(O(n^2)\)

[AGC046D] Secret Passage \(\star\)

Difficulty: \(\color{red}{2911}\)

重做一遍沒想到又有點想法了。

套路的考慮兩個串是有 \(S \rightarrow T\)

把串翻轉過來,操作變成刪掉最后兩個位置然后往中間隨便插。

那么每次用 \(T\) 貪心匹配 \(S\),如果不匹配就是操作得到的。

現在考慮一段后綴 \(P\) 能不能做出 \(a\)\(0\)\(b\)\(1\)\(dp\) 出來這個東西。

貪心匹配完 \(T\),接下來只要求 \(S\) 的某個后綴滿足上面的條件就行了。

\(dp_{i,x,y}\) 表示匹配到 \(i\) 位,現在需要 \(x\)\(0\)\(y\)\(1\)\(T\) 串方案數。

匹配上某個數字以后,考慮是否合法就行了。

[AGC047D] Twin Binary Trees

Difficulty: \(\color{red}{2910}\)

最近處理了一些二進制的題,感覺有些收獲。

雖然雖然還是不會做這題。

雖然雖然這是個虛樹板子。

[AGC047E] Product Simulation

Difficulty: \(\color{red}{2979}\)

少見的造計算機題。

容易得到 01 變量的乘法。

考慮如何提取 \(X\)\(2^k\) 位。

從高向低枚舉貪心加入 \(2^k\) 即可。

分開計算乘法加起來即可通過。

[AGC048D] Pocky game \(\star\)

Difficulty: \(\color{red}{3046}\)

感覺挺好玩的博弈論。

不妨記 \(f_{l,r,k}\) 表示區間 \([l,r]\) 中,最左邊的位置只剩下 \(k\) 個球,此時先手是否必勝,類似記 \(g_{l,r,k}\) 表示最右邊只有 \(k\) 個,那么轉移是簡單的。

容易發現 \(f,g\) 都是關於 \(k\) 單調的,所以記錄下變化的位置再轉移就好了。

[AGC048E] Strange Relation \(\star\)

Difficulty: \(\color{gray}{3819}\)

易知對於任意合法的 \(w\) 前綴,都可以構造出合法的剩余部分。因此可以貪心的確定 \(w\)

考慮每個位置的貢獻。

因為一個位置的 \(w\) 和之前每個 \(a/w\) 都有關,朴素的方法是枚舉之前的值然后依次往后推,我們現在想獨立的計算貢獻。

嘗試倒過來,每次在最前面插入一個元素,考慮如何調整之后的 \(w\)

首先能 +1 的一定 +1,易知此時的 \(b\) 仍合法,而且還滿足字典序最大。

dp 即可,枚舉每個位置產生的貢獻。

[AGC048F] 01 Record \(\star\)

Difficulrt: \(\color{blue}{\texttt{?}}\)

[The solution is deleted]

[AGC049D] Convex Sequence

Difficulty: \(\color{orange}{2602}\)

首先列出題目的式子,然后化簡一下,容易發現本質上是背包,然后發現只有根號個物品有意義,於是就做完了。

注意細節。

\(O(n\sqrt{n})\).

[AGC049E] Increment Decrement \(\star\)

Difficulty: \(\color{brown}{3496}\)

倒過來,現在你需要把某個數組變成 \(0\)

可以欽定先做了幾次 \(1\) 操作,再做幾次 \(2\) 操作。

我們分別研究這兩種操作的影響。

首先假設對 \(a\) 序列施以 \(1\) 操作成為了 \(b\),你需要做若干 \(2\) 操作全變為 \(0\)

\(1\) 操作的貢獻顯然是 \(\sum_{i=1}^n |a_i-b_i|\),考慮 \(2\) 操作的貢獻。

可以發現 \(2\) 操作的貢獻是 \(C\sum_{i=1}^n \max(0,b_i-b_{i-1})\)

現在考慮一個朴素的 dp。記 \(dp_{i,j}\) 表示在位置 \(i\) 填上數字 \(j\) 的最小代價。

考慮轉移的過程,把 dp 值畫作一條折線,容易發現這是凸的。那么轉移就是把斜率大於 \(C\) 的變成 \(C\),然后加一個 \(|a_i-x|\) 的函數。

斜率顯然為整數,因此在做完第一步后,斜率只有 \(C\) 種。

我們維護 \(C\) 個斜率變化的位置,然后每次相當於插入兩個 \(a_i\),然后刪掉最小和最大的元素。

我們考察 \(dp_{i,0}\) 的值,可以發現值就是之前基礎上加上 \(a_i\) 減去最小值。

md編不下去了,這題怎么這么難

[AGC050D] Shopping

Difficulty: \(\color{orange}{2674}\)

枚舉第 \(x\) 個人的答案,然后就大力dp,記 \(dp_{i,j,k}\) 表示 dp 目前到第 \(i\) 個人,然后 \(j\) 個前面的人沒拿到,\(k\) 個后面的沒拿到,隨便走走就 \(O(n^6)\) 了。

考慮一次轉移 \([1,x-1],[x+1,n]\) 的人的答案。

枚舉前面有多少人拿到了,預處理出有 \(x\) 個禮物,\(y\) 個人拿,有 \(z\) 個人拿到的概率記為 \(f_{x,y,z}\),應該就能直接轉移了。

以上是口胡,實現🕊了。

[AGC051D] C4 \(\star\)

Difficulty: \(\color{red}{2807}\)

感覺好強的一個題,雖然事實上這個題列出式子就 win 了,但是大量的觀察和一定的勇氣是必不可少的。

首先考慮利用環長為 \(4\) 的性質,注意到一步一步考慮比較困難,我們同時考慮相鄰的兩步,那么此時操作的形式就非常簡單了:

\(1\rightarrow3 , 3\rightarrow1 , x\rightarrow x\)

注意到有 \(1,2\) 操作數量相等,枚舉使用的次數記為 \(k\),此時我們知道 \(3\) 操作的使用次數了。

\(1\) 上原地不動的次數是 \(\dfrac{a+d-2k}{2}\)\(3\) 上原地不動的次數是 \(\dfrac{b+c-2k}{2}\)

不妨枚舉使用了 \(x\)\(1-2-3\),也就是 \(2k-x\)\(1-3-4\)

此時我們有 \(1-2\) 上的邊還有 \(a-x\) 次,類似的可以推出其他邊的次數。

那么就可以列出式子計算了,容易發現答案等於:

\[\sum_{k,x}\binom{2k}{x}\binom{\frac{a+d-2k}{2}}{\frac{a-x}{2}}\binom{\frac{b+c-2k}{2}}{\frac{b-x}{2}}\binom{\frac{a+d-2k}{2}+k}{k}\binom{\frac{b+c-2k}{2}+k-1}{k-1} \]

式子的分別含義是:選擇一二操作的方向;組合 \(1,3\) 號點的原地不動;把三操作插入一二操作。

勇敢的你把它拆開得到:

\[\sum_{k,x}\dfrac{(2k)!\frac{a+d-2k}{2}!\frac{b+c-2k}{2}!\frac{a+d}{2}!\frac{b+c-2}{2}!}{x!(2k-x)!\frac{a-x}{2}!\frac{d+x-2k}{2}!\frac{b-x}{2}!\frac{c+x-2k}{2}!\frac{a+d-2k}{2}!k!\frac{b+c-2k}{2}!(k-1)!} \]

\[=\sum_{k,x}\dfrac{(2k)!\frac{a+d}{2}!\frac{b+c-2}{2}!}{x!(2k-x)!\frac{a-x}{2}!\frac{d+x-2k}{2}!\frac{b-x}{2}!k!\frac{c+x-2k}{2}!(k-1)!} \]

容易發現本質上是卷積,於是可以做到 \(O(n\log n)\)

[AGC052D] Equal LIS \(\bigstar\)

Difficulty: \(\color{brown}{3304}\)

比較好玩的一個題。

\(f(x)\) 表示以 \(x\) 結尾的 \(\text{LIS}\) 最大長度。

考慮如果原序列的 \(\text{LIS}=2k\),那么只要按照是否有 \(f(x)\leqslant k\) 分成兩類即可。

否則令 \(\text{LIS}=2k+1\),此時我們嘗試能否把原序列分成兩份,每份的 \(\text{LIS}\) 長度是 \(k+1\)

容易發現,只要原序列中存在一個元素,它不在被選出的某個最長 \(\text{LIS}\) 中,且存在一個長度為 \(k+1\) 的上升子序列包括它,那么就能構造。

記一個滿足如上條件的元素為 \(a_x\),包含 \(a_x\) 的一個上升子序列為 \(a_{p_1},\cdots,a_{p_{k+1}}\)。我們按如下的方式分配:

首先我們把個長度為 \(k+1\) 的上升子序列全選入第一個序列。

對於某個其他的元素 \(y\),如果滿足 \(f(y)\not=f(a_{p_i})\),我們就把它選入第二個序列。否則如果 \(f(y)=f(a_x)\),我們也把它放進第二個序列。其他的情況我們就把它放進第一個序列。

考慮第一個序列,顯然存在長度為 \(k+1\) 的上升子序列,然而只存在 \(k+1\) 種不同的 \(f\),因此其 \(\text{LIS}\)\(k+1\)

同理可以知道第二個序列的 \(\text{LIS}\) 也為 \(k+1\)

如果不存在這樣的 \(a_x\),則顯然無解。

[AGC052E] 3 Letters \(\star\)

Difficulty: \(\color{brown}{3457}\)

看上去很典而有點難度的題。

顯然把一個位置變成相對的 \(\pm 1\)

我們可以計算出在這個意義下的前綴和,記為 \(a\)。同樣計算答案的前綴和記為 \(b\)

那么在這個前綴和的意義下,一次操作就是把某個位置 \(\pm 2\),而且要求相鄰兩項的差的絕對值為 \(1\)

可以發現此時的最小操作次數為 \(\dfrac{\sum |a_i-b_i|}{2}\),而且顯然可以達到。

我們只需要合理的調控 \(a,b\) 的初始值使得這個答案最小。

經典的選擇中位數即可。

[AGC053D] Everyone is a winner \(\bigstar\)

Difficulty: \(\color{gray}{3949}\)

非常神秘的題。

顯然,如果我們決策了第 \(i\) 個人前 \(i\) 步做哪些題,那么前 \(i\) 步和后 \(n-i\) 步分別是按花費時間從大至小做題。

從后往前考慮每個人,為了讓前面人的選擇空間更加大,我們首先最大化其做完第 \(i\) 題的時間,其次要盡量選 \(3\)

\(t_{i,j}\) 表示第 \(i\) 個人做完第 \(j\) 題的所需時間,\(T_j\) 表示目前的限制。初始 \(T_j\) 為每個人按時間倒序做題時最短時間。

接下來考慮到第 \(x\) 個人時,對 \(1\leqslant y <x\) 更新 \(T_y=\min(T_y,t_{x,y})\)

顯然這樣能讓前面的人的選擇空間盡可能多,唯一的問題是是否會讓后面的人不是最快。

我們聲稱,在時間消耗是 \(\{1,2,3\}\) 的情況下,不會出現這種問題。即我們有:\(T_x\leqslant t_{y,x}\)

考慮證明,如果我們在考慮第 \(i\) 個人時有 \(T_i +2 \geqslant T_{i+1}\),則顯然對 \(j>i\)\(T_i+2(j-i)\geqslant T_j\)

也就是說,只要 \(i+1\) 不是全用 \(3\) 填前一半,那么 \(i\) 后面填的一串 \(2,3\) 都一定是合法的,另外 \(T\) 的初始值也確保了后面填 \(i\) 的部分合法。至於 \(i+1\)\(3\) 填前一半的情況,也易於經過討論證明合法。

用一個斜率為 \(1/2/3\) 的凸包維護 \(T\) 即可。時間復雜度 \(O(n)\)

[AGC053E] More Peaks More Fun \(\star\)

Difficulty: \(\color{gold}{4036}\)

考試題。

不妨令同一組有 \(b_i > a_i\),我們將它任意排列后,合法當且僅當:

  1. \(\forall k, b_k>a_{k+1}\)
  2. \(\exist p<n,\forall k<p,b_k>a_{k+1};b_p < a_{p+1};\forall k>p,b_k>a_{k-1}\)

例如,對於 \((1,5),(2,6),(3,4)\) 這種排列法,就滿足 \(\text{\#1}\)

\((1,3)(5,4)(6,2)\) 這種排列法,就滿足 \(\text{\#2}\) 且有 \(p=1\)

不難發現這兩組條件包括了所有滿足條件的序列,我們只需轉而計數這兩種方案的貢獻。

從較為簡單的第一種入手,我們將二元組對 \(b\) 排序,那么接下來考慮構造的方式。

我們倒着依次插入二元組,因為插入到一個位置時一定滿足前面的條件,所以我們只需令后面的條件滿足,即每個位置 \(i\) 的貢獻為 \(1+\sum_{k>i,b_i>a_k}1\),記為 \(1+w_i\)

現在考慮第二種,我們能枚舉 \(p\)\(p+1\) 所對應的二元組 \(x,y\),那么有 \(x < y\),可以轉化為分別構造出兩個以 \(x,y\) 結尾的數組,每一個數組都滿足上面的條件,然后倒過來一個再拼接。

於是現在我們來討論每一段的貢獻:

  1. \(i>y\),此時和上面是類似的,而且都可以插入至 \(x,y\) 的前面,那么貢獻為 \(2+w_i\)

  2. \(i \in (x,y)\),此時 \(y\) 的貢獻已經被統計,且無論如何都能插入 \(x\) 的前面,貢獻為 \(1+w_i\).

  3. \(i<x\),類似,貢獻為 \(w_i\)

這樣就能做到 \(O(n\log n)\) 了。

[AGC053F] ESPers \(\star\)

Difficulty: \(\color{blue}{\texttt{?}}\)

轉化題意:

容易發現,設 \(t\) 時刻是最后一個時刻,使得 \(A/B\) 投票數量相等。

\(t\) 時刻前投票的超能力者有 \(0.5\) 的概率 win,\(t\) 時刻后投票的超能力者一定 win。

於是只需計數前 \(t\) 時刻投票的超能力者數目。

我們用另外一個序列來幫助我們計數。

考慮序列 \(a\),如果第 \(i\) 個投票的投給了多數,\(a_i\) 就為 \(1\),否則為 \(-1\)。(如果二者票數一樣,如果投票者不是超能力者則有一半概率為 \(1\)

那么一個合法的 \(a\) 序列形如:

\[S_0,-1,S_1,-1,\cdots,-1,S_x,1,S_{x+1},1,\cdots,1,S_{x+y} \]

其中 \(S\) 是一個串,滿足最長的前提下,每個前綴和都非負,且和為 \(0\)。而且與原 \(a\) 序列相比顯然唯一。

接下來我們需要計算:

  1. \(x,y\) 的選擇方案。
  2. 選出超能力者。
  3. \(t\) 時刻投票的超能力者數目。
  4. 得到原串的概率。
  5. 從原串得到 \(a\) 序列的概率。

考慮到超能力者只可能對應 \(1\),考慮這個序列中 \(1\) 的出現次數。

容易發現出現了 \(w=\dfrac{2n+1-x+y}{2}\)\(1\)

所以選超能力者的方案數是 \(\binom{w}{k}\)

另外,考慮每個非超能力者的貢獻。

如果一個非超能力者投票時,票數不同則為得到原串的概率貢獻 \(1/2\),否則為得到 \(a\) 序列的概率貢獻 \(1/2\),因此這部分的貢獻是:\(\dfrac{1}{2^{2n+1-k}}\)

接下來考慮 \(t\) 的取值。

容易發現,在 \(S_x\) 之前,每兩個 \(-1\) 兩邊就平票了。

經過仔細分析,可以發現:

如果 \(x\) 是偶數,那么 \(t\) 就是 \(S_x\) 的結尾。
否則,\(t\)\(S_{x-1}\) 的結尾。

而它們中出現 \(1\) 的期望數量就是:

\(\dfrac{(x+1)(2n+1-x-y)}{(x+y+1)}\) 或者 \(\dfrac{x(2n+1-x-y)}{(x+y+1)}\)

而總 \(1\) 個數為 \(2n+1-x+y\),因此貢獻為:

\(\dfrac{(x+1)(2n+1-x-y)}{(x+y+1)(2n+1-x+y)}\) 或者 \(\dfrac{x(2n+1-x-y)}{(x+y+1)(2n+1-x+y)}\)

我們還需要考慮最后一項,即 \(S\) 的選擇方案數。

\(S\) 是有強大的組合意義的,在兩項 \(S\) 中插入一個 \(1\),易證方案數為從 \((0,0)\) 走斜線到 \((2n+1,x+y)\) 的方案數。

\(\Large{\binom{2n+1}{\frac{2n+1-x-y}{2}}-\binom{2n+1}{\frac{2n-1-x-y}{2}}}\)

綜合起來,由於為每個原串分配超能力者的概率為 \(\dfrac{1}{\binom{2n+1}{k}}\),把前面全部乘起來得到:

\[\text{let } w=\dfrac{x+y-1}{2}:\\ \]

\[Ans=\sum_{x,y}\dfrac{(2n+1-x-y)\binom{\frac{2n+1-x+y}{2}}{k}}{(2n+1-x+y)\binom{2n+1}{k}2^{2n+1-k}} (\binom{2n+1}{n-w}-\binom{2n+1}{n-w-1}) \times \begin{cases} \frac{x}{x+y+1}&x 是奇數\\ \frac{x+1}{x+y+1}&x 是偶數 \end{cases} \]

我們只需枚舉 \(x,y\) 即可得到答案。

整理上式,其實我們只需求:

\[\dfrac{1}{\binom{2n+1}{k}2^{2n+1-k}}\sum_{x=2t+1,y}\dfrac{x(n-w)\binom{\frac{2n+1-x+y}{2}}{k}}{(w+1)(2n+1-x+y)} (\binom{2n+1}{n-w}-\binom{2n+1}{n-w-1}) \]

為了方便,只討論 \(x\) 為奇數的情況。

我們有 \(y=2w+1-x\),帶入得:

\[\dfrac{1}{\binom{2n+1}{k}2^{2n+1-k}}\sum_{w}\dfrac{x(n-w)\binom{n+w-x+1}{k}}{(w+1)(2n+2w-2x+2)}(\binom{2n+1}{n-w}-\binom{2n+1}{n-w-1}) \]

\[=\dfrac{1}{\binom{2n+1}{k}2^{2n+1-k}}\sum_{w}\dfrac{(n-w)}{(w+1)}(\binom{2n+1}{n-w}-\binom{2n+1}{n-w-1})\sum_{x=2t+1\leqslant 2w+1}\dfrac{x\binom{n+w-x+1}{k}}{2(n+w-x+1)} \]

對后面一坨吸收,可以預處理后 \(O(1)\) 計算,因此總復雜度 \(O(n)\),可以通過此題。

整理一下,我們需要對后面這部分預處理:

\(\sum_{x=2t\leqslant 2w+1}\dfrac{x\binom{n+w-x+1}{k}}{2(n+w-x+1)}=\dfrac{1}{2k}\sum_{x=2t+1\leqslant 2w+1}x\binom{n+w-x}{k-1}\)

\(k\) 固定時,我們維護:

\(S1_n=\sum\limits_{i=2t+1}^n \binom{i}{k-1}\)
\(S2_n=\sum\limits_{i=2t+1}^n i\binom{i}{k-1}\)

然后就有 \(\sum_{x=2t+1\leqslant 2w+1}x\binom{n+w-x}{k-1}=(n+w)(S1_{n+w-1}-S1_{n-w-3})-(S2_{n+w-1}-S2_{n-w-3})\)

同樣處理偶數情況。

[AGC054D] (ox) \(\star\)

Difficulty: \(\color{brown}{3426}\)

不會做,感謝 \(xzy\) 的指導。

先考慮只有 \(\texttt{()}\) 的情況,這是一個簡單的貪心。

結論:
存在一個最優解,刪掉所有的 \(\texttt{o/x}\) 后得到的串與最初串刪掉 \(\texttt{o/x}\) 后的最優解相同。

不知道怎么證,下次補。

那么直接 \(dp\) 就行了。

[AGC054E] ZigZag Break \(\star\)

Difficulty: \(\color{brown}{3499}\)

[AGC055D] ABC Ultimatum \(\bigstar\)

Difficulty: \(\color{brown}{3506}\)

牛逼的。

image

怎么想到的呢?不知道。
怎么出出來的呢?不知道。

證明顯然,但是怎么考慮出一種直觀的理解呢?

[AGC055E] Set Merging \(\bigstar\)

Difficulty: \(\color{blue}{\texttt{?}}\)

據說 anton 找性質從來不用草稿紙/電腦,全在腦子里想,不知道是不是真的。

考察某個時刻的 \(L_i,R_i\) 滿足何種性質。

考察一次對 \((i,i+1)\) 的操作,可以發現就相當於令:

\[L_{i+1} \rightarrow L_i\\ R_i \rightarrow R_{i+1} \]

現給出結論:

結論:定義排列 \(P\) 初始滿足 \(P_i=i\),每次操作 \((i,i+1)\) 后交換 \(P_i,P_{i+1}\)。則 \(S_i=[\min_{j\geqslant i}P_j,\max{j\leqslant i}P_j]\)

證明🕊了,其實隨便考慮一下就是對的。

於是你分析一下就可以知道每個位置的 \(P\),答案顯然是最小逆序對數,貪心即可。

官方題解的 Bouns 里寫可以線性,有知道的老哥可以講解一下嗎/kel

[AGC056E] Cheese \(\bigstar\)

Difficulty: \(\color{gray}{3877}\)

比較新穎的題。

首先有一個比較顯然的觀察:我們調換不同位置放奶酪的時間,不會改變答案。記第 \(i\) 個間隔放了共 \(c_i\) 個奶酪。

概率顯然為 \((n-1)!\prod_i \dfrac{a_i^{c_i}}{100^{c_i}c_i!}\)

同樣的,我們不用考慮每個奶酪何時停下,只需知道有多少奶酪經過了某個老鼠,即可算出這個老鼠的概率。

感性的,因為我們可以隨意分配奶酪的開始點和結束點,不妨令每個奶酪都不會轉超過一圈。

考慮計算第 \(x\) 個人的答案,不妨令 \(x=n\)。記有 \(y\) 個奶酪經過了第 \(n\) 個人,那么顯然,答案只和 \(c_i\) 以及 \(y\) 有關。

如果我們枚舉 \(y\),使用 \(dp\) 計算 \(c\) 的所有取值,就能算出這種情況下 \(n\) 恰好沒吃到的概率。

具體的,記有 \(b_i\) 個奶酪經過了第 \(i\) 個老鼠,那么概率是:\(2^{-b_n}\prod_{i<n} (1-2^{-b_i})\)

接下來只需計算出現此情況的概率,易於計算。

注意到我們可能計算到一些 “沒有終點和起點” 的奶酪,而每出現一種這樣的奶酪就會令概率變為 \(\dfrac{1}{2}\),因此真正的答案就是我們算出的值除二。

由於之前所述的奶酪的存在,我們在計算答案時將其保留為 \(2^{-x}\) 的多項式,最后一次性計算貢獻。

[AGC057D] Sum Avoidance \(\star\)

Difficulty: \(\color{brown}{3307}\)

相當的陰間題。

顯然答案是 \(\lfloor\dfrac{n-1}{2}\rfloor\),選擇更大一半的數字即可滿足此要求。

容易發現 \(x\)\(S-x\) 互斥,令 \(x \leqslant \dfrac{n}{2}\),我們肯定想要小的數字。

一個暴力的做法是,考慮從小往大枚舉每個數字,能加就加,做背包。

可以先枚舉選出集合的最小的數字,記為 \(w\)。容易發現,若 \(w\) 被選擇,則 \(\forall k,\ kw\) 都被選擇。這個最小的數字只需滿足不能被 \(x\) 整除就行了。

另外考慮到如果 \(x_1,x_2\) 被選擇,那么我們也可以選 \(x_1+x_2\)。所以我們維護一個模 \(w\) 的同余類,每個類只需求出最小的能被選的數字,就能直接得到答案了。

於是每次背包都只需要做 \(O(w)\) 的位置,也只有 \(O(w)\) 個數字需要做背包,另外 \(w\) 相當小,於是直接過了。

具體的實現相當神秘。

[AGC057E] RowCol/ColRow Sort

Difficulty: \(\color{gold}{4128}\)

只能說 new AGC 的題網上要么沒題解,要么兩三行,整個一個閱讀理解/tuu。

\(S\)\(B\) 的最大值。

顯然,對每個 \(k\) 把大於 \(k\) 的位置變成 \(1\),不大於 \(k\) 的變成 \(0\),如果 \(A\) 都能變成 \(B\) 就是合法的。

先考慮 \(S=1\),由於 \(B\) 已知,記 \(r_i\) 表示 \(A\)\(i\) 行的和,\(c_i\) 表示 \(A\)\(i\) 列的和,那么一個 \(r\) 的可重集一定對應一個 \(c\) 的可重集。

這兩個可重集構造出來和用 \(B\) 構造出來是一樣的,於是我們只要分配每一行/列對應多少。

記排列 \(p,q\) 表示把每行/列排序后,每行對應 \(1\) 的數量是第幾小,容易轉化為只需求合法的 \(p,q\) 數量。此時 \(p,q\) 是沒有任何限制的。

此時 \(A_{i,j} = 1\) 等價於 \(B_{p(i),q(j)}=1\)

考慮 \(S\not=1\) 的情況,從大到小考慮 \(k\),對不同的 \(k\) 重新定義 \(p_k,q_k\)

這個過程相當於每次只能選出一些就原來是 \(1\) 的挪到下一層仍為 \(1\)

也就是必須滿足:

\(B_{p_k(i),q_k(j)}\leqslant k \rightarrow B_{p_{k+1}(i),q_{k+1}(j)}\leqslant k+1\)

感性理解,由於 \(p_k,q_k\) 沒有其他限制,我們總可以構造一個合理的雙射把條件變成這樣:

\(B_{i,j}\leqslant k \rightarrow B_{p_k(i),q_k(j)}\leqslant k+1\)

即各層獨立。

\(a_i=\sum_j [B_{i,j} \leqslant k]\)\(b_j=\sum_i [A_{i,j} \leqslant k+1]\)

通過上面,我們能知道對每個 \(x\in[1,a_i]\) 我們都有 \(B_{i,x}\leqslant k\) 也就是 \(B_{p_k(i),q_k(x)}\leqslant k+1\)

因為有 \(b_{q_k(x)} \geqslant p_k(i)\),然而 \(b\) 不增,於是 \(b_{\max\{q_k(x)\}} \geqslant p_k(i)\),其中 \(x\in[1,a_i]\)

\(a_i\) 排好序,直接 dp 即可。

[AGC058E] Nearer Permutation \(\bigstar\)

Difficulty: \(\color{gray}{3825}\)

顯然首先考慮如何對排列 \(p\) 計算 \(F(p)\)

\(w\)\(p\) 中逆序對數目一半下取整。

維護一個一開始為 \(p\) 的數組 \(a\),接下來每次從 \(a_1,\cdots,a_{w+1}\) 中選出最小 \(a_i\) 的插到序列 \(q\) 的末尾,然后令 \(w \to w-i+1\)

現在來考察 \(y=F(x)\) 有什么性質。記 \(k\) 為第一個滿足 \(y_k > y_{k+1}\) 的位置。

實際上,我們可以求出 \(x\) 的逆序對數。

手動模擬一下,會發現:

\(y_{k}\) 被刪除前,一定在 \(x\) 里是當時最靠前的位置;\(y_{k}\) 被刪除以后,\(y_{k+1}\) 恰好進入了被刪除的范圍;刪掉 \(y_{k+1}\) 后,剩下的原序列 \(x\) 就是 \(y_{k+2},y_{k+3},\cdots\)

現在嘗試逆推,顯然 \(y_k,y_{k+2},y_{k+3},\cdots\) 就是 \(x\) 的最后幾項。

接下來,我們需要對每個 \(i=k+1,k-1,k-2,\codts,1\),把 \(y_i\) 向后移動到某個合適的位置來得到 \(x\)

\(c_i\) 表示 \(y_i\) 向后移動的長度,我們只需得到每個 \(c_i\) 即可解決這個問題。令 \(p\) 表示 \(y_{k+1}\) 的位置。考慮 \(v=w-p\) 的值。

事實上,經過討論我們知道:令任意一個 \(c_i \to c_i+1\) 均會使 \(v\) 減少 \(\dfrac{1}{2}\)

因為經過前面的分析我們知道最后 \(v\)\(0\)\(\dfrac{1}{2}\),最初是 \(\dfrac{inv}{2}\)\(inv\) 是逆序對數),於是就能通過 \(\sigma s\) 知道 \(inv\)

貪心把 \(y_i\) 往后移即可。



以下是 ARC 部分。

[ARC089D] ColoringBalls \(\star\)

Difficulty: \(\color{gray}{3782}\)

好像做多了這種序列題確實能提升自己這方面的能力。

仍然是套路的考慮怎么用一個操作序列構造出一個特定的顏色序列。

首先把相鄰的藍色/紅色並到一起,然后對於每一段考慮:

如果這一段是純藍,那么只會消耗一個 \(B\)

否則形如 “藍紅藍紅藍” 這樣,容易發現它會消耗類似 藍+紅+若干個任意,任意的數目就相當於紅的段數-1。

於是從前往后掃一下,優先匹配藍/紅,其次匹配任意。

那么反過來解決原問題,我們需要枚舉有幾個藍色段,幾個混色段,然后計算答案。

注意到我們還需要選擇混色段選擇的順序,那么我們欽定紅色段多的混色段在前面,最后階乘就行了。

\(dp_{}\) 表示放了 \(i\) 個混色段,最后的一個混色段有 \(j\) 個紅色段,總共消耗長度為 \(k\) 的答案,每次轉移一些紅色段數目相同的混色段,那么只需要枚舉紅色段數目和總長度,預處理一下即可做到 \(O(n^5)\)

[ARC117F] Gateau \(\star\)

Difficulty: \(\color{brown}{3378}\)

寫個套路做法。

首先容易想到二分答案,然后轉成差分約束。

即計前綴和為 \(s\) ,對於每一個 \(s_{i+n}-s_i\) 都有一個上下界,然后要求 \(s\) 單調不降。

圖建出來大概是這樣子:

image

現在刪掉邊 \(n\rightarrow n-1\)\(0 \rightarrow n\) ,把剩下的點配成點對如 \((1,5),(2,6),(3,7)\) ,然后對於在同一個點對的點一起更新最短路,容易發現可以 \(O(n)\) 計算。

最后再加入那個被刪掉的邊,此時有意義的點非常少。隨便做做就行了。

[ARC122F] Domination \(\bigstar\)

Difficulty: \(\color{blue}{\texttt{?}}\)

首先發現這種看起來就神仙的題,大多數時候需要使用圖論算法。

考慮 \(k=1\) ,那么每個紅色只需要匹配一個藍色即可。

容易發現只有一個斜向的紅色點集是有用的。找出來,然后按 \(x\) 排序。

刪掉已經被滿足了的紅色點,然后考慮移動藍色點。

考慮一個這樣的建圖方式:

我們考慮一個藍色點向上移動滿足一個紅色點的消耗是它們的 \(x\) 之差,而且一次可以滿足一段這樣的點,向右移動同理。

那么以這種方式建圖:

image

(每種不同的邊都上好了色,注意途中只有橙色邊的邊權為 \(1\) ,橙色邊還有邊權為 \(0\) 的逆向邊。)

考慮從一個紅點 \(L\) 跑到另外一個紅點 \(R\) ,經過了藍點 \(x\) 即代表用 \(x\) 滿足 \([L,R]\)

因此答案即 \(S \rightarrow T\) 的最短路。

對於 \(k \not = 1\) ,根據經典結論,可以拆成 \(k\)\(k=1\) 的子問題,因此上個費用流就行了。

題目好 nb !我好菜/ll

[ARC132E] Paw \(\star\)

Difficulty: \(\color{red}{3144}\)

有難度的計數題。

首先有一個結論:最后的形態形如 <<<<___>>>> ,其中 _ 是不變化的部分。

因此簡化為只需給一邊排列順序並選擇方向,使得滿足最后變成 <<<<

\(d_i\)\(i\)\(.\) 的答案,那么在左側插入一個 \(.\) ,它的選擇方案有 \(2i+1\) 種,即:

\[d_{i+1}=(2i+1)d_i \]

直接計算即可。

[AGC140F] ABS Permutation (Count ver.) \(\star\)

Difficulty: \(\color{brown}{3392}\)

生成函數基礎練習(bushi

考慮使用生成函數解決問題。

首先二項式定理,只需求欽定有 \(k\) 個位置滿足條件的方案。

容易抽象成有 \(w\) 條長度為 \(l\) 的鏈,你可以隨意欽定一條邊是否滿足條件,最后需要把若干個邊組成的鏈拼起來。

首先我們考慮一條鏈的生成函數,記元 \(x\) 表示點數,\(y\) 表示邊數,考慮到只要點數大於等於 \(2\) 就可以選擇 reverse,所以生成函數形如:

\[F(x,y)=x+2x^2y+2x^3y^2+\cdots \]

\[=x+2x^2y\dfrac{1}{1-xy}=\dfrac{x(1+xy)}{1-xy} \]

現在你可以隨意拼接鏈,也就是你需要求:

\[[x^l]\dfrac{1}{1-\dfrac{x(1+xy)}{1-xy}} \]

\[=[x^l]\dfrac{1-xy}{1-xy+x+x^2y} \]

\[=[x^l]\dfrac{1-xy}{1-x(y+1+xy)} \]

因為有

\[[x^m]\dfrac{1}{{1-x(y+1+xy)}} \]

\[=[x^m]\sum_i x^i(y+1+xy)^i \]

\[=\sum_i \binom{i}{m-i}y^{m-i}(y+1)^{2i-m} \]

現在需計算這個的 \([y^t]\) 項,得到:

\[[y^t]\sum_i \binom{i}{m-i}y^{m-i}(y+1)^{2i-m} \]

\[=\sum_i \binom{i}{m-i}\binom{2i-m}{t-m+i} \]

卷積計算即可。

於是現在我們得到了 \(G(x)=[x^l]F(x,y)\),快速冪得到 \(G^w(x)\) 即可解決此問題。

[ARC142E] Pairing Wizards \(\star\)

Difficulty: \(\color{brown}{3232}\)

感覺雖然思維路徑比較短,但是實際上並不非常簡單。

首先對於每條邊,我們讓每個數都滿足更小的限制,顯然這是必須的。

考慮一個點,假設它連向了一個 \(b\) 大於等於它的點,我們稱它是優秀的。

那么如果兩個優秀的點之間有連邊,那么我們顯然可以忽略它。

於是優秀的點和不優秀的點之間構成了二分圖,可以使用經典的網絡流建模解決。


免責聲明!

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



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