「AGC046 補題記錄」



省選晚上的 AGC,今天 vp 了一下,拿到了大眾題數 ABCD。EF 題等我有時間再說吧。

目前進度 4/6。


A - Takahashikun, The Strider

problem link。

answer = 360 / gcd(X, 360)

submission。


B - Extension

problem link。

被這道 sb 題卡了,把 C 題切了過后回來才知道咋做。

第一想法:定義 f(i, j) 表示現在已有 i 行 j 列的方案數,枚舉下一次填行/列。

為了避免算重,考慮怎么唯一生成一種方案:盡量先擴展行,再擴展列。
也就是說,擴展一連串列過后必須緊接擴展一行,且這一行必須在最新的列里填黑。

對應到 f(i, j) 的轉移:
(1)擴展行:\(f(i-1,j)\times j\)
(2)擴展列:\(\sum_{k<j} f(i-1, k)\times (i-1)^{j-k}\)

初值為 \(f(A, B) = 1\);最后答案為 \(\sum_{i=1}^{D} f(C,i)\times C^{D-i}\)

時間復雜度 \(O(n^3)\),隨手優化一下 \(O(n^2)\)

submission。


C - Shift

problem link。

轉化一下操作:設有 m 個 0,將序列分成 m + 1 段,第 i 段有 ai 個 1。
則操作等價於選擇 i < j,ai++,aj--(aj > 0)。

從后往前 dp,定義 \(f(i, j, k)\) 表示處理到第 i 位,后面減了 j 次,當前總操作次數是 k。

枚舉當前位最終狀態是增加還是減少(注意不能考慮過程中的先增后減/先減后增,不然會算重)進行轉移。

看起來是 \(O(m\times|S|^3)\)
冷靜分析一下發現 1 的總數只有 \(O(|S|)\) 個,如果我們每次 k 只取 \(\sum_{p>i} a_p\),則總復雜度是 \(O(|S|^3)\)

update in 2020/07/02:經評論提醒,這部分復雜度分析的關鍵在於,轉移時枚舉減少量的總量為 \(\sum a_i = O(|S|)\),因此分析出來是 \(O(|S|^3)\)
上面那種證明並不是本質問題所在(雖然看着很有道理)

submission。


D - Secret Passage

problem link。

\(f(i, x, y)\) 表示后 i 位固定,有 x 個自由的 0,有 y 個自由的 1,是否合法。

初始值 \(f(n, 0, 0) = 1\),轉移時枚舉前兩個是 0/1/2 個自由 0/1。

為了避免算重,如果 \(f(i, x, y)\) 對應的方案嚴格包含 \(f(j, x', y')\)(顯然有 \(j > i\)),則最后將 \(f(j, x', y')\) 置為不合法。

\(g(i,x, y)\) 表示后 i 位固定,有 x 個自由的 0,有 y 個自由的 1,能夠組合出的方案數。

邊界狀態 \(g(0, x, y) = \binom{x+y}{x}\)
后 i 位構成的串一定是生成串的子序列,因此仿照子序列匹配的過程進行 dp 即可。

最后答案顯然為 \(\sum f(i, x, y)\times g(i, x, y)\)

submission。


E - Permutation Cover

下次一定。


F - Forbidden Tournament

下次一定。


免責聲明!

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



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