ABC 335 VP 總結

end_switch發表於2024-10-13

前言

ABCDE + 口胡 F + 口胡 G 假做法,三分之一偽 AK(?

正文

A

B

C

D

構造一個環形遞增矩陣即可。

E

考慮何時才有一個非降序列。

\(val_x\) 為點 \(x\) 的權值。

對於一個相鄰的點對 \((u, v)\),可以分成三種情況:

  • \(val_u > val_v\)

此時只有 \(v \to u\) 的可能,\(v\)\(u\) 連邊。

  • \(val_u < val_v\)

類似上一種情況,\(u\)\(v\) 連邊。

  • \(val_u = val_v\)

此時無論是經過 \(u\) 還是經過 \(v\) 或是 \(u, v\) 兩點都經過,它們的貢獻都一樣,將 \(u, v\) 縮成一個點即可。

不會吧不會吧不會有人這種縮點用 tarjan 吧???

對不起,我紫菜。

你怎麼知道我 tarjan 縮點然後調 30 min 弘文了?

並查集維護縮點操作。縮點後跑 DAG 上最長路即可。toposort 可以勝任。

注意是在縮點之後重新編號連邊。

時間複雜度 \(O(n\alpha (n) + m)\)

F

首先設 \(dp_i\) 為到第 \(i\) 格的填色方案。

你會想到一個 naive 的向後轉移:

\[dp_i \to dp_{i + k \times a_i} \]

時間複雜度 \(O(n \frac{n}{V})\)

有另一個 naive 的轉移,是去考慮 \(dp_i\) 從前面的何處轉移而來的。

顯然 \(dp_j \to dp_i\) 的條件是 \(j + k \times a_j = i\),轉換得:\(i \equiv j (\mod a_j)\)

維護 \(DP_{i, j}\) 表示模 \(i\) 位置為 \(j\) 的方案總和,那麼有:

\[dp_i = \sum_{j = 1}^{V} DP_{j, i \mod j} \]

\(DP\) 有懶轉移:

\[dp_i \to DP_{a_i, i \mod a_i} \]

時間複雜度 \(O(nV)\)

此時兩個轉移的複雜度跟 \(V\) 相關並且兩種狀態完全一致,不妨考慮對轉移過程根號分治。

欽定閾值 \(V = \sqrt {\max_{i \in [1,n]} \left \{ a_i \right \}}\),若 \(a_i > Lim\) 則用第一種方式轉移,反之用第二種方式轉移。

時間複雜度 \(O(n \sqrt {\max_{i \in [1,n]} \left \{ a_i \right \}})\)

G

想到了一個正確機率很大的東西但是會被構造資料卡掉的方法,丟人,不說了。

總結

打得算好的,因為 ABCD 沒什麼分討不容易寫掛算是有點運氣成分,E 想 + 調了接近 65 min,F 口胡出來了但是某些細節還是沒注意,G 是數學確實不會做,確實是純菜了。

後面還是得注重訓練碼力和刻意記住某些經典的 trick,因為某些題目的關鍵點就可能是某個 trick 的延申。