Codeforces 1314 题解
這場(chǎng)整體質(zhì)量感覺可以算 2020 年度(目前為止)最垃圾。
A
按數(shù)值從小到大掃描,維護(hù)一個(gè)優(yōu)先隊(duì)列,每遇到一個(gè)數(shù)加入隊(duì)列,每次數(shù)值發(fā)生 \(+1\) 時(shí)彈掉隊(duì)列中價(jià)值最大元素,然后把此時(shí)隊(duì)列中所有元素的價(jià)值和類加進(jìn)答案。
時(shí)間復(fù)雜度 \(O(n\log n)\).
代碼: 78541690
B
這題看起來最難以處理的就是編號(hào)問題,所以就從編號(hào)問題入手,可以發(fā)現(xiàn)當(dāng)場(chǎng)上還剩下 \(2^i\) 個(gè)人時(shí),將所有人按編號(hào)從小到大劃分為 \(2^{i-1}\) 個(gè)大小相等的組,則每組中恰有一人在 Upper Bracket,恰有一人在 Lower Bracket. 每場(chǎng)比賽會(huì)合并相鄰的兩個(gè)組。
于是就可以 DP 了:設(shè) \(f[i][u][x][y]\ (x,y\in \{0,1\})\) 表示第 \(i\) 層 \(u\) 這一組,Upper 和 Lower 的人分別是否被關(guān)注即可。
時(shí)間復(fù)雜度 \(O(2^n)\).
代碼: 79378015
C
把所有子串拎出來排序,二分答案。每次就是要求將 \(s\) 劃分為 \(m\) 個(gè)連續(xù)子串,且每個(gè)子串字典序都不小于 \([L,R]\) 的方案數(shù)。(串一模一樣的時(shí)候沒有必要再區(qū)分大小)
直接 DP 是 \(O(n^3)\) 的,但是注意到一個(gè)點(diǎn)能轉(zhuǎn)移到的是一段區(qū)間,于是就可以 \(O(1)\) 轉(zhuǎn)移。
時(shí)間復(fù)雜度 \(O(n^2\log n)\).
代碼: 79516172
D
無奇環(huán)等價(jià)于任何一個(gè)點(diǎn)都不能同時(shí)出現(xiàn)在奇數(shù)和偶數(shù)的位置上。設(shè) \(1\) 號(hào)點(diǎn)的位置是 \(0\),可以爆搜偶數(shù)位置上的值,然后就是要對(duì) \((i,j)\) 求 \(\min_k(dis_{i,k}+dis_{k,j})\),其中 \(k\) 有不超過 \(\frac{m}{2}\) 個(gè)位置是被 ban 的。于是對(duì)每個(gè) \((i,j)\) 預(yù)處理一下前 \(4\) 大就可以完成。
時(shí)間復(fù)雜度 \(O(n^{\frac{m}{2}-1}m^2)\),常數(shù)很小。
代碼: 78551177
題解還給了一種隨機(jī)做法:大概每次把所有的點(diǎn)以某種隨機(jī)方式染成二分圖,隨機(jī) \(512\cdot 20\) 次,最優(yōu)解在至少一次的隨機(jī)中出現(xiàn)在二分圖兩側(cè)的概率約為 \(1-2\times 10^{-9}\).
E
不難發(fā)現(xiàn) \(|f^2(A)|\le \sqrt{2|A|}\).
考慮如何判斷一個(gè)終止?fàn)顟B(tài)是否合法,只需要求出初始狀態(tài)最少有多少個(gè)元素即可,那么肯定是每次貪心地展開,設(shè) \(f^k(A)\) 從大到小排序后為 \(b_1,...,b_l\),則 \(f^{k-1}(A)\) 中有 \(b_i\) 個(gè) \(i\). 把按這種方式貪心展開的函數(shù)叫做 \(g(A)\). 很容易推知 \(|g(A)|=\sum^l_{i=1} a_i,|g^2(A)|=\sum^l_{i=1}ia_i\).
那么對(duì)于 \(K=1\) 或 \(K=2\) 的情況,可以直接 DP 解決,使用 DP 劃分?jǐn)?shù)的經(jīng)典方法,有一個(gè)序列初始為 \(\{1\}\),每次給最后面添加一個(gè) \(1\) 或者給所有數(shù)都 \(+1\). 時(shí)間復(fù)雜度 \(O(n^2)\).
對(duì)于 \(K\ge 3\) 的情況,必定有 \(|f^k(A)|\le \sqrt{2n}\le 63\). 于是可以爆搜劃分?jǐn)?shù),然后貪心展開。一個(gè)很有用的剪枝是,如果任何時(shí)候展開的大小超過 \(n\) 就沒有必要繼續(xù)搜下去了,加上這個(gè)之后運(yùn)行時(shí)間從 \(1918\ \text{ms}\) 變成了 \(78\ \text{ms}\)。
時(shí)間復(fù)雜度 \(O(n^2+P(\sqrt {2n})\text{poly}(n))\),其中 \(\text{poly}(n)\) 部分很小。
代碼: 79614806
F
nim 積意義下的離散對(duì)數(shù)。下面默認(rèn)求 nim 的復(fù)雜度是 \(O(\log^2 W)\).
考慮整個(gè)域的大小是 \(W=2^{64}-1\),首先顯然有一個(gè) \(O(\sqrt W\log^2 W)\) 的 BSGS 做法。
顯然 \(W\) 不是質(zhì)數(shù),分解一下發(fā)現(xiàn) \(W=3\times 5\times 17\times 257\times 641\times 65537\times 6700417\),每一個(gè)質(zhì)因子都不大,可以考慮計(jì)算答案在模每個(gè)質(zhì)因子意義下的值,最后 CRT 合并。
設(shè)當(dāng)前處理的質(zhì)因子是 \(P\). \(a^{\bigodot kP+r}=b\ \Leftrightarrow\ a^{\bigodot kW+\frac{W}{P}\cdot r}=b^{\bigodot \frac{W}{P}}\ \Leftrightarrow\ (a^{\bigodot \frac{W}{P}})^{\bigodot r}=b^{\bigodot \frac{W}{P}}\),所以就是要解 \((a^{\bigodot \frac{W}{P}})^{\bigodot r}=b^{\bigodot \frac{W}{P}}\). 直接 BSGS 即可。
時(shí)間復(fù)雜度 \(O(\sum \sqrt{P_i}\log^2 W)\).
代碼: 79635282
總結(jié)
以上是生活随笔為你收集整理的Codeforces 1314 题解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces 1338E JYP
- 下一篇: Codeforces 1344F Pie