[2024.11.25]NOIP全真模擬賽

Redamancy_Lydic發表於2024-11-25

總榜 rk6,但是發現只需要改 3s 的 T1 就可以拿到 rk2,但是沒有如果。

賽時

T1 怎麼像是原啊,算了反正不記得。

總結關鍵詞:斜率為非負整數,直線在某區間內的高度有限制。

想了想,發現斜率最大值是 \(m\over n\) 級的,所以後面顯然可以再乘上一個 \(n\)

於是有思路:列舉斜率 \(k\),對每個元素計算想讓直線經過它時所需要的 \(b\) 值,找到出現次數最多的那個 \(b\) 值,就得到答案了。

umap 擔心會炸空間,所以我用正常陣列存 \(b\),每次清空就行了。

寫寫寫,大樣例過了,好了不管了。

T2 只會暴力啊。

繼續想,發現我可以預處理正常刪除到某個狀態時剩餘元素的個數。

發現每次可以 \(\mathcal{O}(n^2)\) DP 啊,我只需要一個 \(dp_{i,j}=\max(\min(dp_{i-1,j},dp_{i,j-1}),c_{i,j})\) 就行了,這樣總複雜度是 \(\mathcal{O}(n^3)\) 的,有一個優秀的 50pts。

寫寫寫,大樣例過了(因為沒給 \(5000\) 的樣例)。

繼續想,每次對 DP 陣列的修改是不是有限的狀態啊?然後就想到了 DDP,所以我不想了。

看 T3,發現我會 \(\mathcal{O}(n^4)\) 暴力。

寫寫寫,小樣例過了。

是不是隻有顏色相同的那些點才是有用的啊?不對,隨便一個顏色全相同的資料就能卡掉我。

看著可以用 LC 最佳化,但是我忘了怎麼寫 LC 了,跳了跳了。

看 T4,我會一個複雜度 \(\mathcal{O}(nk\log (nk)+mk\log(nk))\) 的演算法。

寫完以後發現不過樣例。

打表,哎我的 size 怎麼刪除一次減少了 \(3\) 啊,我用的是 multiset 啊?

難道刪一次會全刪了麼?好像還真是。

怎麼辦呢?我可以存結構體,雜湊一下,就可以了。

寫寫寫,怎麼又掛了?

我突然想起來了 \(\color{red}血淋淋的教訓\),哦還真是這問題,改完就可以了。

比賽還剩 10min,擺了。

賽後

吃飯的時候發現 T1 我的桶裡面會有負數,希望不會掛太多吧。

評測,看榜,HDS 用手法多拿了一堆分。

我 T1 水到了 55pts(小L:這都能 55pts?

最終是總榜 rk6。

image

T1 下發程式碼,加上偏移量,提交,透過,然後我就有 200pts 了,唉。

T4 告訴我們一定要記住 \(\color{red}血淋淋的教訓\)

但其實也不用,刪除的時候我們去刪迭代器就可以了,比如 se.erase(se.find(k))

聽講評,T2 抽象模型以後類似網格圖,每次修改確實是有限的,但是我那個思路不好走下去。

T3 如果把兩步分開的話就有一個很簡單的 \(\mathcal{O}(n^3)\) 演算法了,加上 LC 就能過了啊。

T4 聽懂了,大致就是每 \(k\) 個元素分塊,發現塊內隨便做,塊與塊之間有最大值的性質,也能用線段樹做,單點修改也能改。

只能說還行吧。