退役前的做題記錄 Ⅱ


退役前的做題記錄 Ⅱ

被群友發現是照着 zsy 的題單刷的了 /kel

https://www.cnblogs.com/zhoushuyu/p/10492689.html

我什么時候變成日更博主了 /kk

#2712. 「BalkanOI 2018 Day1」Minmaxtree

比較 naive 的題,不難得到一條邊的上下界,那么這條邊的邊權選上下界一定更優,所以就是一個裸的二分圖匹配了,得到上下界可以使用並查集優化下。

CF1142D Foreigner

非常牛逼啊。

發現這樣一件事,對於一個好數 x,由它產生的好數 y,我們可以通過 \(y \bmod 10\)\(x \bmod 11\) 推知 \(y \bmod 11\),這樣就可按 \(\bmod 11\) 建出自動機了。

具體來說,設 \(x\) 排名 u,y 排名 v,有這樣的關系:

\[\Large v=9+55\lfloor\frac u{11}\rfloor +(0+1+\cdots (u \bmod 11)-1)+(x \bmod 10) + 1\\ \Large v \bmod 11=10+\frac {(u \bmod 11)(u \bmod 11 - 1)}{2}+(x \bmod 10)\\ \]

在自動機上 dp 即可。

6338. 「SDWC2018 Day2」優秀

\(\Theta(n^5)\) 能在 300 ms 內過 \(n = 100\) 是我妹想到的。

\(dp[i][j][k][t]\) 表示前 i 種數放了 j 個,在排列上有 k 個需要插入的位置,排列的方案數是 t 的總方案數。

事實上這就是一個 \(\mathsf{dp \ of \ dp}\),大力轉移,我們放 \(p(p \ge k)\)\(i+1\) 來插入,新的排列需要插入的位置個數就是 \(p - k\) 個,並且方案數就是相當於一個箱子放球問題,用隔板法即可。

方案數那維非常容易不合法,也許是這題可以 \(\Theta(n^5)\) 過的原因。

3069. 「2019 集訓隊互測 Day 1」整點計數

考慮枚舉 dis,那么就是這題 圓上的整點

答案就是 \(\sum_{i=1}^Nf(i)^k\),有經典結論設 \(\chi(n)=\begin{cases}1& n\bmod 4=1\\-1 &n \bmod 4=3\\0 & \text{Ohterwise}\end{cases}\) 那么答案就是 \(4\sum_{d|i^2}\chi(d)\)

容易發現 \(\chi\) 是一個積性函數,\(f\) 並不積性,但是 \(\frac f4\) 是積性函數,設 \(g(x)=\frac{f(x)}4\)\(g(x)\) 在質數上的點值為 \(g(p^c) = \begin{cases}(2c+1)^k & p \bmod 4 = 1\\1 & p \bmod 4 = 3\end{cases}\),接下來就是用 \(\mathbf{min25}\) 解決積性函數求和的問題了。

UOJ426 [集訓隊作業2018]石像

\[\Large \sum_{a_1=1}^m\sum_{a_2=1}^m\cdots\sum_{a_n=1}^m \sigma_0^3(\gcd(\prod a_i)^3)\prod [a_{x_j}\le a_{y_j}]\\ \Large =\sum_{d=1}^{m}\sigma_0^3(d^3)\sum_{a_1=1}^{\frac md}\sum_{a_2=1}\cdots\sum_{a_n=1} \sum_{k|a_1,k|a_2\cdots}\mu(k)\prod [a_{x_j}\le a_{y_j}]\\ \Large =\sum_{T=1}^m\left(\sum_{d|T}\sigma_0^3(d^3)\mu(\frac Td)\right)\sum_{a_1=1}^{\frac mT}\sum_{a_2=1}\cdots\sum_{a_n=1}\prod [a_{x_j}\le a_{y_j}]\\ \Large =\sum_{T=1}^mG(T)F(\left\lfloor\frac mT \right\rfloor)\\ \]

G 是一個積性函數可以使用傳統篩法篩出來,其在 \(p^c\) 的點值是:

\[\Large G(p^c)=\sigma_0^3(p^{3c})-\sigma_0^3(p^{3c-3})\\ \Large G(p^c)=(3c+1)^3-(3c-2)^3=81c^2-27c+9\\ \]

F 可以使用拉格朗日插值。

為什么是多項式?我們可以枚舉所有點一共有多少個不同的值,顏色個數為 k 的方案個數是固定的系數,然后從 m 里面選出來 k 種顏色,這個是關於 m 的 k 次多項式。

如何算出顏色個數為 k 的方案呢,我們可以按拓撲序進行轉移,然后進行二項式反演即可(如果開兩個數組滾動應該也行)。拓撲序可以用 tarjan 縮點的時候順便求。

CF1063F String Journey

我觀察到了如下性質:

  1. 答案是 \(\Theta(\sqrt n)\) 級別的。
  2. 最后一個串是一個字母,然后每次只會在前端或后端加入一個字母。

應用第一個性質可以得到 \(\Theta(n\sqrt n)\) 的哈希表做法。

應用第二個性質可以得到 \(\Theta(n\log n)\) 的后綴自動機做法,具體來說:

將串翻轉,設 \(dp_i\) 表示以 i 結尾的最大長度是多少,貪心可得不需要考慮長度更小的串。比較厲害的是觀察到 \(dp_{i+1}-1\le dp_i\),所以得到了 \(dp_{i+1}\) 的范圍,我們可以暴力掃,勢能分析一下復雜度是對的,如何 check 一個答案是后綴自動機模板題。

3114. 「SDOI2019」移動金幣

知道結論后就比較簡單了,發現這就是一個階梯博弈,結論是:奇數堆石子異或和為 0 必敗,否則獲勝。

那么我們枚舉奇數堆石子總和,剩下部分使用組合數分配,設 \(dp[n][bit]\) 表示石子的最高位小於等於 bit,總和等於 n 先手必敗的方案數,暴力枚舉轉移即可,時間復雜度 \(\Theta(nm \log n)\)

PE444

直接不好做,我們需要考慮每個人的決策。

輪到 x 時,他知道已經翻開而且沒有走的數字集合 \(P\) 和沒有出現的數字集合 \(S\)

如果 \(\min S > \max P\),直接翻開自己即可。否則我們證明一定拿走 \(\max P\)

如果 \(\max P > \max S\),顯然直接拿走 P 最優,否則我們有可能拿到比 \(\max P\) 小的,這是不優的,我們拿到比 $\max P $ 大的,后面一定會被換走,結局還是不優的 >_<。被換走可以歸納證明。

通過手玩發現,留下來的數(不是人)一定是后綴最小值,證明也比較好證。

這個東西的期望是 \(\ln n\) 的,可以考慮算每個位置的貢獻,\(E(p)=\sum_{i=1}^n\frac 1i=\ln n+\gamma+\frac 1{2n}\)

\[\Large S_0 = \sum \sum_{j\le i}\frac 1jx^i\\ \Large S_0 = \frac{-\ln(1-x)}{1-x}\\ \Large S_k = \frac{-\ln(1-x)}{(1-x)^{k+1}}\\ \Large S_k' = \left(\frac{-\ln(1-x)}{(1-x)^{k+1}}\right)'\\ \Large =\frac 1{(1-x)^{k+2}}-(k+1)\frac{\ln(1-x)}{(1-x)^{k+2}}\\ \Large =\frac 1{(1-x)^{k+2}}+(k+1)S_{k+1}\\ \Large [x^n](k+1)S_{k+1}=[x^{n+1}](n+1)S_{k}-\binom{n+k+1}{k+1} \]

python 算一算即可。

P7111 青春有悔

首先總方案數是好求的,先考慮無修改的情況:

\[\Large \sum_{i\ge L}[x^i]\prod\frac{1-x^{a_i+1}}{1-x}\\ \Large =\sum_{i\ge L}[x^i]\frac{1}{(1-x)^n}\prod1-x^{a_i+1}\\ \]

不如改求失敗的概率:

\[\Large \sum_{i< L}[x^i]\frac{1}{(1-x)^n}\prod(1-x^{a_i+1})\\ \Large =[x^{L-1}]\frac{1}{(1-x)^{n+1}}\prod(1-x^{a_i+1})\\ \]

\(\ln,\exp\) 再卷一下,單次就可以做到 \(\Theta(n \log n)\) 了。

假設我們算出來這個東西 \(G(x)\),每次相當於要求 \([x^t]\frac{1-x^{c}}{1-x^{a}}G(x)\),不難發現單次可以 \(\Theta(n)\)

進一步發現求的是 \([x^t]\frac{G(x)}{1-x^a}-[x^{t-c}]\frac{G(x)}{1-x^a}\)\([x^t]\frac{G(x)}{1-x^a}=\sum_{i=0}^{t}[i \equiv t\bmod a][x^i]G(x)\)

經典問題,根號分治即可。

3115.「SDOI2019」連續子序列

講道理以前沒見過這個序列,這里有一些性質:http://www.matrix67.com/blog/archives/5822

這個序列可以由集合 \(\{0\}\) 以這樣的方式形成:當前集合大小為 \(2^k\),將集合中每個 0 替換成 01,1 替換成 10,形成新的 \(2^{k+1}\) 大小集合。

對應的就可以縮回去,可以證明對於長度大於 3 的字符串有唯一的方法縮:否則就會出現 00 / 11 被划分到一塊的情況。

這樣就可以大力記憶化了。

3102. 「JSOI2019」神經網絡

現在二合一題越來越多了。

我們可以比較簡單的 dp 出將一棵樹划分成 k 條鏈的方案數,注意長度大於 1 的鏈有兩個方向。

第二問是有 T 個顏色,每種顏色有若干有標號小球,將小球排成一個環,任何兩個相鄰小球顏色不同的方案數。

考慮容斥,如果是一個序列,那么對於一種顏色生成函數大概是:

\[\Large \sum f_i i!\sum_{j \le i}(-1)^{i-j}{i - 1\choose i - j}\frac{x^j}{j!} \]

考慮環上的情況,我們強制第一種顏色的一號點所在的鏈放在第一個位置,第一個顏色的 EGF 為:

\[\Large \sum f_i(i-1)!\sum_{j \le i}(-1)^{i-j}{i - 1\choose i - j}\frac{x^{j-1}}{(j-1)!}\\ \]

小問題是第一個顏色可能和最后一個顏色相同,我們減去不合法的情況,這時第一個顏色 EGF 為:

\[\Large \sum_{i>1} f_i(i-1)!\sum_{j \le i}(-1)^{i-j}{i - 1\choose i - j}\frac{x^{j-2}}{(j-2)!} \]

然后暴力卷積即可。

3051. 「十二省聯考 2019」皮配

十二省聯考有 3 道 dp 題 😮

容易設究極暴力 dp,\(f[N][0/1][Ya][Za][R][r]\),稍微優化一下發現 r 這維沒有用,加上滾動數組可以獲得 40 pt。

接下來我們仔細分析一下,每個導師沒有有自己的人數限制,而是和別人一共的人數限制,思考一下發現就是有兩堆數 \(\{c_0,c_1\},\{d_0,d_1\}\),從第一堆里選一個數,再從第二堆里選一個數,都減去自己的權值。如果 \(k = 0\),那么兩堆就是完全獨立的,我們可以先 dp 出第一部分,然后再 dp 出第二部分合並即可,這樣就可以拿到 \(70pt\) 了。

否則我們把有限制的人拿出來單獨 dp 然后最后合並即可。

2435. 「ZJOI2018」迷宮

感覺整個人都自動機了:保齡自動機。

這題本質是求 m 進制 \(k\) 倍數識別自動機的最小節點數。

有一個平凡構造,建立 k 個點,點 i 向 \(i \times m + r \quad(r \in [0,m-1])\) 連邊,不難發現這樣是正確的。

由奇怪定理可知所有 DFA 最簡化都是一樣的,所以我們試圖對這個自動機進行簡化。

暴力算法跑不過的,因為這題有優美的性質。

考慮兩個節點 \(u, v\) 本質相同當且僅當對於任意串 \(s\),從 \(u\) 開始,匹配 \(s\) 到了終止節點,那么 \(v\) 開始也會到終止節點,不難發現第一個條件,兩個節點到達終止節點的最短串大小相同,設其為 t,對於一個串,從 \(u\) 節點開始走,最終會到 \(u\times m^{l+1}+a_l\times m^{l}+\cdots a_0 \bmod k\) 號節點,發現只要 \(u \times m^{l+1}\equiv v\times m^{l+1}\bmod k\) 即可,那么當 \(l+1=\text{最短串長度}\) 時限制最嚴格,有了這兩個限制,我們可以進行模擬了。

3042. 「ZJOI2019」麻將

又是一道自動機題:胡牌自動機。

我們將期望轉化為摸了 k 張牌,不獲勝的概率是多少。

如果給定一種狀態,我們可以用 dp 來判斷其是否胡牌,具體而言:\(dp[0/1][j][k]\) 表示是否摸了對子,i - 1 處開始的順子個數為 j,i 處開始的順子個數為 k 時最多可以摸幾張面子,cnt 表示最多可以配出一個對子,一個未胡狀態就對應着這 18 個 dp 數組的值再加上一個 cnt,看起來很大,但實際上很稀疏,經過搜索,我們發現只有 2000+ 個狀態,這樣就可以快樂 dp 了,轉移時用組合數,注意在值域上從前向后 dp 而不是隨機加入一張牌。

當然也可以使用 DFA 最小化算法進一步縮小 DFA 大小,但這里沒有必要。


免責聲明!

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



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