題解-AGC056


賽時 AC:A B C

補題:DEF

A (Easy)

首先爆搜得到 \(N = 6...11\) 的答案。

\(n\) 拆分成若干個 \([6,11]\) 的正整數 \(n_1,n_2,...,n_k\),然后把這些矩陣拼起來即可。

aclink

B (Medium)

考慮如何判斷一個方案是否可行:每次找到一個可能的最大值,然后按這個最大值分成兩個子區間遞歸處理。

考慮原問題。我們現在要計算一段區間 \([l,r]\) 滿足條件的方案數:

顯然我們要找到 \(\ge 1\) 個可能的最大值,因此如果我們找到了 \(k\) 個最大值,我們乘以 \((-1)^{k-1}\) 的容斥系數,並把整個區間分成 \(k+1\) 個子區間處理。

這個可以再加個 \(\rm DP\) 處理,時間復雜度 \(\Theta(n^3)\)

aclink

C (Easy+)

\(0\) 附上 \(-1\) 的權值,\(1\) 附上 \(1\) 的權值。令 \(v_i\) 表示第 \(1\) 個到第 \(i\) 個字符的權值和。

限制分為兩種:

  1. \(|v_i - v_{i - 1}| = 1\)
  2. \(v_{L - 1} = v_R\)

把第一種變為 \(|v_i - v_{i - 1}| \le 1\),由於差分約束不會更改奇偶性,因此一定構造出了一個合法的字典序最大的方案,反轉即可得到字典序最小的方案。

由於這里的邊權 \(\ge 0\)\(\le 1\),所以可以用 \(\rm 01 \ BFS\) 優化,我偷了個懶救寫了 \(\rm SPFA\)

賽時寫的東西比較奇怪,沒法優化,這是賽后寫的:aclink

D (Medium+)

瞎猜了個結論過了,不會證,咕了。

E (Hard)

不放計算 \(k = n - 1\) 的答案。

枚舉再每個位置放的奶酪個數 \(a_0,...,a_{n-1}\)

再枚舉從位置 \(n - 1\) 繞回到 \(0\) 的奶酪個數 \(x\)

那么第 \(i\) 個奶酪經過的次數就是 \(b_i = x - i + \sum b_i\)

一個奶酪不被吃的概率顯然是 \(2^{-b_i}\)

對於 \(k < n - 1\),第 \(k\) 個奶酪被吃,概率是 \(1 - 2^{-b_k}\)
對於 \(k = n - 1\),第 \(k\) 個奶酪不被吃,概率是 \(2^{-b_k}\)

因此把這些概率全部乘起來,可以表示成 \(\sum 2^{-ix} p_i\) 的形式,最后用等比數列計算,然后 \(\rm DP\) 就對了嗎?

其實還不對,例如 \(n = 1\) 答案算出來是 \(2\)。這部分官方題解講的不太詳細,這里仔細講一下。

我們分析一下奶酪行走的流程:

首先由若干奶酪被放置后,走到了 \(n - 1\) 還沒被吃掉。設有 \(r\) 個。

\(x\) 個奶酪奶酪從 \(n - 1\) 繞回到 \(0\)(同一個奶酪繞多次算多個奶酪)

\(x\) 個奶酪中有 \(x - r\) 個是從 \(0\) 重新回到 \(n - 1\)。給這些奶酪標記為 \(0\)

\(x\) 個奶酪中有 \(r\) 個是從 \(0\) 走到某個位置被老鼠吃掉了。給這些奶酪標記為 \(1\)

\(x\) 個奶酪的標記序列是一個字符串,比如 01001000001000

被放置且走到 \(n - 1\) 后還沒被吃掉的 \(r\) 個奶酪,對應的從 \(0\) 開始走的奶酪分別是:

第一個被放的:01

第二個被放的:001

第三個被放的:000001

也就是說一個奶酪是經過了若干圈(0),最后在某一圈被老鼠消滅(1)。

但是注意到最后多出了三個無家可歸的 0。而這些 0 是被要求不存在的,因為他根本沒有起點。

我們觀察最后的 \(c\)0 對答案產生的什么影響:每個 0 都要求了最后剩下的那只老鼠不要把奶酪消滅,因此給答案貢獻了 \(\frac{1}{2^c}\) 的系數。

因此我們原先計算的答案事實上是真實答案的 \(\sum_{c = 0} \frac{1}{2^c} = 2\) 倍。因此最后把答案乘以 \(\frac{1}{2}\) 即可。

aclink

F (Medium+)

大概是猜個結論,然后轉成折線問題,轉換成另一個柿子,然后再計數。

題解比較難寫,咕了。


免責聲明!

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



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