NOIP2024 模擬賽19

AresF發表於2024-10-30

A

拆位算貢獻,列舉每一個位置,與操作兩者都是 \(1\),異或操作相反,或操作有一個是 \(1\) 即可。

B

觀察到條件 \(a_1\le k\) 證明是必然有答案的,答案這樣構成:從 \(1\) 走到任意點 \(j\),然後 \(j\) 挖空,然後推到 \(i\),記 \(f_i\) 為從 \(1\) 走到 \(i\) 的最小花費,答案 \(i\) 即為 \(f_j+h_j+2\times |i-j|\),問題變成求 \(f_i\),先把 \(h_{i-1}-h_i\) 塞進線段樹裡,然後轉化成一堆數,每次可以將一些數減去 \(1\),使得它們的平方和小於等於某個數,一個比較基礎的貪心策略就是每次選最大的然後減去 \(1\),這個顯然會超時,不妨考慮這樣最後造成的結果,就是一堆數都是最大值 \(x\),然後又有一些是 \(x-1\) 這種,所以可以直接二分這個最大值 \(x\),然後 check 一下是否是在一個界限範圍之內的,當然找到這個 \(x\) 後,有些 \(x\) 是可能變成 \(x+1\) 的,二分一下即可,複雜度為 \(\mathcal{O}(n\log n)\),但是常熟很大。

C

大樣例太水了導致掛分的,愣是 7 個大樣例都沒查出來問題,具體做法是城市建設那道題類似的,與 \(q\) 相關的邊很少,將與 \(q\) 相關的邊先設為 \(\text{inf}\),然後跑一遍最小生成樹,此時沒有被選擇的邊且與 \(q\) 不想關的邊在後續決策中也一定不會出現。然後將於 \(q\) 相關的邊設為 \(-\text{inf}\),然後跑一遍最小生成樹,此時被選擇的邊且與 \(q\) 不想關的邊在後續決策中一定出現,將它們記錄下來。將上面兩種邊排除發現邊就已經很少了,然後 \(2^q\) 列舉一下限制選哪邊,注意與 \(q\) 相關的邊也應該加入計算。

D

不會捏。

相關文章