11.4 - ? 改題紀要

xrlong發表於2024-11-04

11.4 - ? 改題紀要

NOIP2024模擬1

不是每個題都有亂搞過得是吧。

  1. T1 玩遊戲

    先字首和,問題變成 \(a_i+b_j\le0\)

    考慮顯然貪心,每次移動到更優的位置。

    這樣可以跳到最小的位置,發現到終點和從起點跳過來是類似的,倒著跑一遍即可。

  2. T2 排列

    首先發現當 \(k>\log n\) 時一定無解 因為顯然每次最少消掉一半。

    考慮 dp。

    發現對於最大值可以將陣列分成不相干的兩部分,考慮直接在笛卡爾樹上跑。

    除了要特判的根,對於一個子樹,其只有兩種可能:有一邊有最大值和兩邊都有最大值。設 \(dp_{i,j,0/1}\) 表示大小為 \(i\),總共 \(j\) 步消完,\(0/1\) 表示不同種子樹。

    轉移挺顯然,暴力整是 \(n^2\log^2n\) 的,加上巴雷特約減輕鬆過,字首和最佳化一下可以做到 \(n^2\log n\) 的。

  3. T3 最短路

    好題。

    首先那個二維 dij 是假的了。

    考慮最後走的路線一定是一些環接起來,順逆時針依次顛倒。環的交就是重合的點。

    \(dp_{i,j}\) 表示 \(1\to i\to j\to 1\) 的最短距離,類似 dij 暴力列舉其後面兩個 \(i',j'\) 可以做到 \(n^4\log n\)

    發現的轉移貢獻 \(j\to i'\to j' \to i\)\(i'\to j' \to i\)\(j\) 沒有關係,可以設定一箇中轉狀態 \(f_{i,j}\) 表示 \(dp_{i,k_1}\to dp{j,k_2}\) 中只計算了 \(k_1\to j\) 的貢獻的值,這個顯然可以在 \(dp_{i,k_1}\) 時列舉 \(j\) 轉移,然後用 \(f_{i,j}\) 列舉 \(k_2\) 轉移 \(dp_{j,k_2}\) 即可做到優秀的 \(n^3\log n\) 複雜度。

    因為值域較小,可以用桶代替堆,做到 \(n^3\),但是 \(n^3\log n\) 已經可以透過。

  4. T4 矩形

    起手掃描線。

    考慮線段樹維護加線段和減線段,加線段時直接維護線段覆蓋次數,並將覆蓋的所有顏色推平,可以用並查集維護;減線段時打標記,當加線段時發現這段區間已經被減成 \(0\) 了就新染顏色。

    發現只有加線段會新加常數個顏色段,一個顏色段只會貢獻一次,複雜度顯然。

相關文章