NOIP2024模擬賽9 賽後總結

Saltyfish6發表於2024-09-29

前言

聽說把枕頭哭溼,晚上可以夢見大海

先說明一下情況。

\(\text{T2}\),同樣的資料,本地 \(\text{500ms}\to\) \(\text{sxyz: }1.7\texttt{s}\)

\(\text{T3}, \text{CF 3s}\) 的時限,什麼爛機子開 \(\text{1s}\)

我們都有光明的未來。

我儘量剋制住自己的情緒。

B / ABC176F

很智慧的一道題,稍微總結一下。

首先你顯然有 \(dp_{i,j,k}\) 表示經過 \(i\) 次操作,前面剩下一個 \(j\) 一個 \(k\) 可以得到的最大分數。

暴力轉移其實是比較簡單的,假設這一次操作除了 \(j,k\) 另外三個數是 \(a,b,c\)

  • \(a,b,c\) 刪掉,\(dp_{i,j,k}=dp_{i-1,j,k}+[a=b=c]\)

  • \(a,b,c\) 中的兩個和 \(j,k\) 中的一個刪掉,不妨設我們刪的是 \(a,b,j\)\(dp_{i,c,k}=dp_{i-1,j,k}+[a=b=j]\)

  • \(a,b,c\) 中的一個和 \(j,k\) 刪掉,不妨設我們刪的是 \(a,j,k\)\(dp_{i,b,c}=dp_{i-1,j,k}+[a=j=k]\)

觀察到第一種轉移可以看作是全域性加 \([a=b=c]\) 可以直接寫一個全域性增量標記在前面,最後答案直接 \(\text{ans}+\text{add}\) 即可。

至於後面兩個,觀察到變化的狀態只有 \(\mathcal{O}(n)\) 個。並且變化一定是變大(因為有第一種轉移的存在)

故你考慮把所有變化狀態暴力取出來,然後維護一些最大值陣列即可。

由於你每次只改變了那些會改變的,故總複雜度 \(\mathcal{O}(n^2)\)

很難崩的是,這個題你一旦常數大了一點你就會喜提 \(\text{TLE 95}\)

\(\text{My Submission.}\)

C / CF407D

\(\texttt{2700}\) 的題,但是感覺又不完全算的上。

題解非常清晰明瞭,這裡懶得講了,講一下自己的巨噁心做法。

為了將這個做法最佳化到 \(\mathcal{O}(n^3)\) 我也是煞費苦心了。

說實話這個做法真的挺難有語言描述的。

首先你考慮維護一個 \(\text{num}_{i,l,r}\),表示對於第 \(i\) 行,找到最小的 \(j\ge i\),存在一個數 \(k_1,k_2\in[l,r]\),滿足 \(a_{i,k_1}=a_{j,k_2}\)