CF1327 簡要題解

2022-05-19 04:41:03 字數 2705 閱讀 9516

不知道說啥了,直接寫題解吧(

手玩一下可以發現,前 \(k\) 個奇數的和等於 \(k^2\),在此基礎上,可以進行任意次 \(+2\)。因此無解當且僅當 \(n或 \(n\not\equiv k\pmod 2\)。

模擬找到每個公主匹配的王子,如果完美匹配則無解。否則,任選一位未被選擇的公主和王子就是答案。

將所有棋子向左移動 \(m-1\) 步,再向上移動 \(n-1\) 步,此時所有棋子都集中在左上角的格仔。暴力讓它掃過每個格仔即可。總步數 \((m-1)+(n-1)+(nm-1)<2nm\)。

對於置換中每乙個迴圈 \((q_1, q_2, \ldots, q_l), q_i=p_}, q_1=p_\),顯然對於任意的 \(k\),\(p^k\) 中從迴圈中某個位置出發向前走,不會走出這個迴圈。考慮可能的 'infinite path' 的長度,其必然是 \(l\) 的乙個約數。列舉它的長度 \(d\) 和起點 \(q_x, 1\leq x\leq \frac\),則這樣的迴圈在 \(k=\frac\) 時,恰好第一次出現在置換中。暴力判斷每個侯選答案是否合法即可。

對於乙個長度為 \(l\) 的迴圈,列舉的總複雜度是 \(o(d_l\cdot l)\),其中 \(d_i\) 是 \(i\) 的約數個數。

對於 \(1\leq i< n\),長度為 \(i\) 的 block 有兩種可能:

左端點 \(\in [2, n-i]\),此時它的兩邊不能與它相等,方案數有 \((n-i-2+1)\cdot 9^2\times 10\times 10^\) 種。

左端點 \(\in \\),此時它只有一邊不能與它相等,方案數有 \(2\times 9\times 10\times 10^\) 種。

對於 \(i=n\) 的,顯然只有 \(10\) 種。

(所以這題的意義是什麼……)

經典套路題,不過連想帶寫也花了不少時間。

首先每一位的取值是獨立的,先列舉位數,轉化為 \(01\) 串上的若干區間,每個區間要求:

至少有乙個 \(0\);

或者全是 \(1\)。

求方案數,每一位乘起來即可。

要求全是 \(1\) 的區間可以差分維護,掃一遍確定哪些位置被染了 \(1\),並將這樣的區間兩端縮起來。具體實現時,設 \(s_i\) 表示原序列中 \([1, i]\) 內有 \(s_i\) 個位置染了 \(1\),則可以將乙個原序列上的區間 \([l, r]\) 對映成 \([l'=l-s_, r'=r-s_]\),表示原序列中第 \(l'\) 到第 \(r'\) 個沒有被染成 \(1\) 的位置,注意 \(l'>r'\) 時無解。設 \(n'=n-s_\)。

剩下的區間,發現如果存在 \(l_1\leq l_2\) 且 \(r_1\geq r_2\),則只要 \([l_2, r_2]\) 的條件滿足,則 \([l_1, r_1]\) 的條件一定也滿足,可以直接刪掉 \([l_1, r_1]\),使得剩餘的區間都滿足 \(l_i且 \(r_i。

考慮容斥,列舉區間的某個集合 \(s\) ,滿足 \(s\) 中區間內全是 \(1\),貢獻為 \((-1)^\cdot 2^\),其中 \(f(s)\) 表示 \(s\) 中區間的並集長度。

直接容斥顯然不太能接受,考慮 dp。設 \(f_i\) 表示排好序的前 \(i\) 個區間中,最後乙個被選入容斥集合 \(s\) 的區間是 \([l_i, r_i]\),每種方案當前的貢獻為 \((-1)^\cdot 2^\),所有方案的權值和(注意這裡的貢獻與上面略有出入)。轉移的時候列舉上乙個區間 \(j\),發現有兩種情況:

\(r_j,也就是說兩個狀態之間存在著長度 \(\geq 0\) 的間斷,將 \([l_i, r_i]\) 加入 \(f(s)\) 時的貢獻恰好就是 \(r_i-l_i+1\),因此這一部分的貢獻是 \(-2^\cdot f_j\)。

\(r_j\geq l_i\),也就是說兩個狀態是直接相連的,將 \([l_i, r_i]\) 加入 \(f(s)\) 後,右端點移動的距離和 \(f(s)\) 新增的長度相等,因此這一部分的貢獻是 \(-f_j\)。

注意到左右端點都是嚴格遞增的,因此兩個部分的分界點是唯一的,並且隨著 \(i\) 增大而增大。

將第一部分的貢獻化成 \(2^\times (-2^\cdot f_j)\),只需維護括號內的部分,字首和優化一下就可以做到 \(o(1)\) 轉移。

注意答案等於 \(\sum_^ f_i\cdot 2^\),其中 \(m'\) 代表第一類區間數量,\(r_0=0, f_0=1\)。

看錯資料範圍了……雖然看對了可能也不太會做(

實際上思路還是比較清晰的,只要能想到用 ac 自動機處理多串匹配相關的 dp。(主要是看錯資料範圍之後,串長和有 \(10^6\) 那麼多……怎麼看著也不像能套個狀壓 dp 的樣子啊(x

對所有模式串建出 ac 自動機,並處理好每個節點跳 \(\operatorname\) 過程中經過節點的權值和。

設 \(f_\) 表示考慮母串的前 \(i\) 個位置,目前停留在 ac 自動機的 \(j\) 位置,已選的字母集合為 \(s\) 的最大值。

這個狀態設計,單是狀態數就已經不可接受。但是不難發現,整個過程中,只有不超過 \(14\) 次決策,其餘過程都是沿著自動機的邊按部就班地走。因此,只考慮s[i]='?'的位置,中間的過程實際上與 \(s\) 無關,只與 \(j\) 有關。因此可以列舉每個 \(j\),暴力地在自動機上走,儲存每乙個 \(j\) 會走到的位置和途經的權值和。對於每乙個 \(s\),都可以直接套用。

於是就做完了,複雜度 \(o\left((\delta2^+|s|)\cdot \sum |t_i|\right)\)。

題解 CF1485 簡要題解

奇怪的難度。當 b 2 的時候再操作,操作次數是一定的。因此 b 的變化量很小,暴力列舉。考慮哪個數不同,然後不同後可以選擇的區間是什麼。會發現中間夾著的區間選兩遍,旁邊的選一遍。做字首和好了。簡單轉化發現一定要滿足 a k b 1 k。列舉 b 貢獻式帶有乙個 min 找到其分割點,前一部分直接求...

CF1335 簡要題解

草,賽時寫題解 分奇偶討論一下,可以知道方案數為 lfloor frac rfloor 首先可以隨便構造使得前 a 個字元中有 b 個不同字母。然後對於任意的 i in a 1,n 令 s i s 即可。設最大的組有 x 人,非空的組有 y 個,如果 x ne y 顯然答案可以取到 min x,y ...

Atcoder AGC024 C F簡要題解

ans i 2,ai 0n ai ai 1 1 ai ai 1 1 ai ans sum limits n a i a 1 a i neq a 1 a i ans i 2,ai 0 n ai ai 1 1 ai ai 1 1 ai u v u,v u,v 同色的條件 找到 u,v u,v u,v 路...