2021-2022 ACM-ICPC Brazil Subregional Programming Contest 題解


B - Beautiful Words

先對主串 \(A\)​ 復制一次(\(A' = A\times 2\)​)建出 SAM,然后對每個 \(B_i\in S\)​ 在自動機上跑匹配,得到 SAM 上每個點匹配到過的最長長度。跑完所有串后 parent 樹上父子互相更新一下這個長度(瞎搓)。

然后我們看一看每個 \(A'\)​​ 長度為 \(n\)​​ 的子串,對應結點上的最長長度。然而這個僅僅是“最長能在 $$​​​ 中找得到子串的后綴” ,我們要的是子串而不是后綴。

考慮 \(A'[x-n+1:x]\)​​​​ 的一個最長后綴 \(T = A'[x-l+1:x]\)​​​​​ 在 \(\ S\)​​​​ 中作為子串出現過。那么之后 \(n-l\) 個位置都有接受 \(l\) 的貢獻。容易忽略的一點是,再往后也會有貢獻,形式是等差數列,因為每往后一次會截掉 \(1\) 的長度。這兩種貢獻用掃描線和 multiset 分別維護即可。

復雜度 \(O(n\log n)\)​​,應該有更優美的方法?

C - Creating Multiples

枚舉 \(i:1\to L\),每次嘗試減小 \(D_i\)。設減小量為 \(a\),那么有:

\[R - B^{L-i}\cdot a \equiv 0 \pmod {B+1} \]

其中 \(R\) 是當前數字 \(\bmod {B+1}\) 的結果。

擴歐解線性同余方程即可。

E - Escalator

直接模擬每個時間點即可。

G - Getting in Shape

考慮 AA...AB 這樣為一個組件,那么由若干個組件拼接而成的解的方案數即為這些組件分別的方案數的乘積。

然后可以發現 \(x\)​ 個 A 的組件的方案數為 \(f_i\)​,其中 \(f_i\)​ 為 \(f_0=1, f_1=2\)​ 時的斐波那契數列的第 \(i\)​ 項。那么這樣的話,\(10^{15}\)​ 內可用的組件數為大約七十多種。

考慮對一個數字 \(n\),用這些組件,從大到小試除方案數。注意大組件可用小組件不一定就不會用,最后 DFS 實現即可。

H - Handling the Blocks

將每個顏色分別排序,最后扔回原來位置觀察是否有序即可。

I - Inverting Everything

暴力 DFS,保證時刻不出現環,過了。所以模 \(10^9+7\) 是詐騙。

很離譜,不會證為什么是對的。但是感性理解一下也說得通,條件確實很苛刻。

正緊做法大概是固定兩個或三個點然后判斷,改天看看,有點暈。

J - Just Bootfall

wz 好強。感覺是很難想的網絡流建模。

考慮最小割。我們建出邊數為 \(m\)\(n\) 條不相交路徑,形如 \(S \rightsquigarrow T\)。第 \(i\) 條路徑的第 \(j\) 條邊容量為 \(U - P_{i,j}\)。其中 \(U\) 是一個足夠大的數,保證每條路徑只會割一次。

然后對於 \(C\) 的限制就很好搞了。對於一對 \(a, b\),我們在對應的兩條路徑上對應點相連,容量就為 \(C\):如果兩者距離相差 \(d\),那么恰好會多割掉 \(d\)​ 條。

建完了。

K - Kathmandu

簽到題。

L - Listing Passwords

並查集。對於一條限制 \([l, r]\),我們將對應位相連。最后檢查是否矛盾,然后全 ? 的貢獻 \(\times 2\) 即可。

如果翻轉復制一邊字符串,我們可以將限制轉化為兩個區間對應位相連的問題。這時一個 被我忘了的 套路:倍增。

首先建出 \(O(n\log n)\) 個點。對於兩個區間,我們將其長度二進制拆分,然后區間分割為 \(O(\log n)\) 段分別相連。所有操作都過了之后,從大到小枚舉 \(2^j\),若有 \((i, j) \to (f, j)\),那么將這一信息傳遞到 \(2^{j-1}\) 層,即連接 \((i, j-1)\leftrightarrow (f, j-1)\)\((i+2^{j-1}, j-1)\leftrightarrow (f+2^{j-1}, j-1)\)

然后就能直接查詢了,復雜度 \(O(n\log ^2 n)\)

M - Monarchy in Vertigo

閱讀理解。離線建樹,然后跑出 dfn。最后維護當前點集然后每次詢問 dfn 最小的即可。

N - No Luck

不難轉化為二維數點問題,然后就能樹狀數組掃描線做了,\(O(n\log n)\)


免責聲明!

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



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