訓練記錄(Jul.)

Lu_xZ發表於2024-07-03

7/2

AT_abc217_f *提高+/省選-

\(g_{i, j}\) 表示 \(i, j\) 是否相連,設 \(f_{i, j}\) 為把 \([i, j]\) 消去的方案數。

如果 \(g_{i, j} = 1\)\(f_{i, j} \gets f_{i + 1, j - 1}\)

對於一般情況,不難想到列舉中轉點:

\[f_{i, j} \gets \sum f_{i, k} \times f_{k + 1, j} \times \pmatrix{\frac{j - i + 1}{2}\\\frac{k - i + 1}{2}} \]

可以預設左右各自的消去順序已經確定,只要考慮如何分配即可。

但是這樣是不對的,對於 ()()()... 的情況會重複計算,因此強制讓 \(i, k\) 匹配即可。

\[f_{i, j} \gets \sum g_{i, k} \times f_{i + 1, k - 1} \times f_{k + 1, j} \times \pmatrix{\frac{j - i + 1}{2}\\\frac{k - i + 1}{2}} \]

P3607 [USACO17JAN] Subsequence Reversal P *省選/NOI-

\(f_{i, j, L, R}\) 表示 \([i, j]\) 段,值域為 \([L, R]\) 的最大長度。

  • 小值域到大值域:\(f_{i, j, L, R} \gets \max \bigg(f_{i, j, L + 1, R}, f_{i, j, L, R - 1}\bigg)\)
  • 小區間到大區間:\(f_{i, j, L, R} \gets \max \cases{ f_{i + 1 , j, L, R} + [a_i = L] \\ f_{i, j - 1, L, R} + [a_r = R]}\)

考慮所謂翻轉操作:

1 6 2 3 4 3 5 3 4
  ^         ^ ^ ^
  |         +-+ |
  +-------------+

翻轉序列兩側可以兩兩匹配,正好符合區間 dp 的步驟。

嘗試翻轉左右兩端元素:\(f_{i, j, L, R} \gets f_{i + 1, j - 1, L, R} + [a_i = R] + [a_j = L]\)

CF1922F *2500

狀態很好想,之前是因為轉移成環所以沒補,結果發現也可以沒環。

\(f_{l, r, x}\) 表示把 \([l, r]\) 推平成 \(x\) 的最小代價。

\(g_{l, r, x}\) 表示 \([l, r]\) 中不含 \(x\) 的最小代價。

\[g_{l, r, x} = \min \begin{cases} g_{l, mid, x} + g_{mid + 1, r, x}\\ \\ g_{l, r, y} + 1\quad y \ne x \end{cases} \quad f_{l, r, x} = \min \begin{cases} f_{l, mid, x} + f_{mid + 1, r, x}\\ \\ g_{l, r, x} + 1 \end{cases} \]

AT_abc328_g *提高+/省選−

\(1 \sim n\) 依次列舉 \(a_i\) 的位置。

設當前 \(b\) 已經被填的集合為 \(S\),記 \(f_{S}\) 表示集合為 \(S\) 時的最小花費。

考慮 \(f_{S}\) 怎麼去更新後續節點。

\(l = \vert S\vert + 1\),則 \(1 \sim l - 1\) 已經填完了,接下來要填的一定是 \(l\sim r\) 的連續一段。

列舉 \(r\),從 \(b\)\(p\) 位置開始填(\([p, p + len)\) 都不能被填過):

\[f_{S \cup [l, r]} \gets f_S + c + \sum_{i \in {[l, r]}} \vert a_i - b_{p + i- l} \vert \]

AT_abc223_g *提高+/省選−

直接用最大匹配轉移比較複雜,樹是二分圖:最大匹配 = 點數 - 最大獨立集。

也就是求滿足下列條件的點數:

\[n - \text{ 原圖最大獨立集} = (n - 1) - \text{挖掉 }x\text{ 後的新圖的最大獨立集} \]

剩下的問題即與 CF1984E 相同。

第一遍掃描求出 \(f_{x, 0/1}\) 表示在以 \(x\) 為根的子樹中選/不選 \(x\) 的最大獨立集:\(\begin{cases}f_{x, 0} = \sum \max(f_{y, 0}, f_{y, 1})\\f_{x, 1} = \sum f_{y, 0}\end{cases}\)

第二遍掃描求出 \(g_{x, 0/1}\) 表示選/不選 \(x\) 的最大獨立集:\(\begin{cases}g_{x, 0} = \max\bigg(g_{fa, 1}, f_{x, 0} + g_{fa, 0} - \max(f_{x, 0}, f_{x, 1})\bigg) \\ g_{x, 1} = f_{x, 1} + g_{fa, 0} - \max(f_{x, 0}, f_{x, 1}) \end{cases}\)

7/1

摸底考。打得一坨還有 rk9,結果全是初中生。。upd:全是小學生。

F:離散化,建權值線段樹。每個節點記錄:

  • \(cnt\):當前區間有多少個數。
  • \(s_i\):當前區間內的座標模 \(5\) 相同的數之和。

上傳子樹資訊:

\[\begin{cases} cnt = l_{cnt} + r_{cnt}\\ \\ s_i = l_{s_i} + r_{s_j} & j + l_{cnt} \equiv i \pmod 5 \end{cases} \]

G:暴力 + 二分,喜提全場唯一 40 pts。

從下至上掃描,列舉哪一種顏色不選,此時所選區間的矩陣已經確定。

還要考慮沒有上邊界的點,列舉每一對顏色相同的相鄰點作為左右邊界。

訓練記錄(Jul.)

H:初中✌泰牛。

把字串補成等長,少的部分用 # 補齊,預設 # 的字典序小於 a

對字符集做一個對映:\(\# \to 0,\quad a\sim z\to 1 \sim 26,\quad ? \to 27\)

預處理 \(g_{x, y, z, a, b}\) 表示 \(s_{1} = x,\ s_{2} = y,\ s_3 = z\)\(x, y\) 的大小關係位 \(a\)\(y, z\) 大小關係為 \(b\) 是的方案數。

其中大小關係 \(\text {cmp}(x, y) = \begin{cases} 0 & x < 1\\ 1 & x = y \\2&x > y \end{cases}\)

\(g_{i, 0/1, 0/1}\) 表示前 \(i\)\(s_1\)\(s_2\) 的字典序大小為 \(0/1\)\(0\) 為相等,\(1\)\(s_1 < s_2\)), \(s_2\)\(s_3\) 的字典序大小為 \(0/1\) 時的方案。

\(s_{1, i} = A,\ s_{2, i} = B,\ s_{3, i} = C\),列舉大其小關係 \(x, y\)

\[f_{i, j, k} \gets g_{A, B, C, x, y} \times f_{i - 1, a, b} \]

  • \(a\)\(0\)\(x\) 不為 \(2\),同理 \(b\)\(0\)\(y\) 不為 \(2\)
  • \(a\)\(1\)\(x\)\(0\),則 \(j\)\(1\),同理若 \(b\)\(1\)\(y\)\(0\),則 \(k\)\(1\)

CF1840D *1400

最大值最小,二分答案。首先對 \(a\) 排序,選的點一定在 \(a_1 \sim a_n\) 之間,否則不優。

設當前答案為 \(d\),選一個點能覆蓋 \(2d\) 的區間,看最後點數是否 \(\le3\)

CF1833G *1800

很直白的題,葉子的刪邊方式是唯一的,自下而上模擬即可。

CF476D *1900

所有數都除 \(k\) 後即找 \(n\) 個兩兩互素的四元組,且最大值最小。

一個四元組內只能有一個偶數 \(e\),也就是必須消耗 \(3\) 個奇數。

不妨猜想每個組都形如 \(\{e - 1,\ e,\ e + 1,\ e + 3\}\),證明他們兩兩互素。

  • \(e + 1 \not\perp e + 3\)

    如果存在 \(d > 1\) 使得 \(d \mid e + 1\)\(d \mid e + 3\),則 \(d \mid (e + 3) - (e + 1)\),矛盾。

同理可證 \(e - 1 \not\perp e + 3\)\(e \not\perp e + 3\)

相關文章