多校 A 層衝刺 NOIP2024 模擬賽 16

Qyun發表於2024-10-31

多校A層衝刺NOIP2024模擬賽16

T1 四捨五入

簽到題

注意到一個數是否會入上去只和其剩餘繫有關,即滿足 \(i\mod j<\frac{1}{2}j\),會入上去,考慮列舉 j 的倍數,其貢獻就成了一個區間,差分即可。

時間複雜度是調和級數的,為 \(O(n\ln n)\)

T2 填算符

貪心,特殊性質

顯然將所有 \(\&\) 放在最左端一定不劣(不管是考慮多少),考慮在此基礎上調整即可。

具體的可以貪心調整最右邊一個,即將最右邊的從最右端往左移,第一個合法的即使其所在位置,然後由於是 \(\&\) 操作,他的貢獻會與前邊的掛鉤,找到它獨一無二的貢獻,作為下一個合法的判斷即可。

時間複雜度為 \(O(n\log n)\)

T3 道路修建

基環樹,換根DP,樹上問題,樹鏈剖分,線段樹,倍增

發現加邊操作後的答案一定會包含原樹的答案,而新加的答案為所有經過所加邊的路徑。

所以可以先 \(O(n)\) DP,算出原樹的答案,然後考慮新增邊的貢獻。

考慮套路,計算路徑長度的和轉化為每一條邊的貢獻(經過的次數)。

由於是基環樹,可以先考慮環上的邊的貢獻。

這一部分可以分為新加邊和原樹邊。

  • 新加邊
    顯然經過其的次數為總路徑的個數,考慮計算總路徑的個數。路徑只有兩個端點,而現在又欽定了必須經過新加邊,而且有路徑點不交的限制,所以只要選出兩個點則能對應唯一的路徑。即就是 \(\binom{n}{2}\),但此時算入了兩個點都在同一個子樹的貢獻,減掉即可。
    記為 \(tot=\binom{n}{2}-\sum_{v\in circle}\binom{siz_v}{2}\)

  • 原樹邊
    顯然能求出不經過的次數(相對於當前所加邊而言),即邊兩邊聯通塊的大小之積,記為 \(g_i\),則經過的次數就為 \(tot-g_i\)

所以環上邊的貢獻為 \((dis_{u,v}+1)tot-\sum_{v\in circle}g_v\)

再考慮子樹(環上的子樹)的貢獻

  • \(f_i=\sum_{v\in subtree_i}dis_{i,v}\),則一個子樹的貢獻為 \(f_i(n-siz_i)\)

所以總貢獻為 \((dis_{u,v}+1)tot-\sum_{v\in circle}g_v+\sum_{v\in circle}f_v(n-siz_v)\)

現在考慮怎麼快速求出 \(\sum_{v\in circle}\binom{siz_v}{2},\sum_{v\in circle}g_v,\sum_{v\in circle}f_v(n-siz_v)\) 這三個部分,分別記為 \(res1,res2,res3\)

  • \(res1\)
    直接維護的難點在於 \(siz\) 在變(因為定義的是環上的子樹),所以可以考慮樹剖 \(siz\) 只維護所有的輕兒子的貢獻,這樣除了鏈底需要特殊處理,其他的能直接維護線上段樹上。還需特殊處理 \(lca_{u,v}\),記 \(tot_i=\sum_{j=1}^ndis_{i,j}\) (不同與前面的 \(tot\)),所以得換根 DP 求出 \(tot\) 陣列。

  • \(res2\)
    每個點套路維護其父向邊的 \(g\) 陣列,樹剖即可。

  • \(res3\)
    類似 \(res1\)

總時間複雜度為 \(O(n\log^2n)\)

可以倍增,這樣就能最佳化掉一支 \(\log\)

T4 逆序圖

DP,結論題

不會,但是可以講講結論

upd:會了,但是先講講結論

結論:逆序對的關聯關係不會是巢狀狀的,即關聯關係會構成一段區間,並且這一段區間的值是連續的

證明考慮反證法,即嘗試用 \(4\) 個值構造出一個巢狀狀的關聯關係,發現由於單調性顯然是不行的。

即就是說序列是一些單調遞增的連通塊組成的

題目所求的即是在這些連通塊中每個至多選擇一個的權值之積。並且很好的是題目算貢獻的方式考慮的兩點之差,所以只用考慮相對量。

考慮 DP 解決。

  • 設計狀態
    \(f_{i,0}\) 表示欽定 \(1∼i\) 在同一個(不一定合法)連通塊內部時的權值和。
    \(f_{i,1}\) 表示恰好 \(1∼i\) 在同一個(一定合法)連通塊內部時的權值和。
    \(g_i\) 表示恰好 \(1∼i\) 在同一個(一定合法)聯通塊內的方案數。

  • 轉移

    \[f_{i,0}=\sum_{j=1}^{i-1}F_j(i-j)\binom{i}{2}(i-2)! \]

    考慮每一對的貢獻即可。

    \[g_i=i!-\sum_{j=1}^{i-1}j!g_{i-j} \]

    容斥計算。

    \[f2_i=g2_i-\sum_{j=1}^{i-1}j!f2_{i-j}-\sum_{j=1}^{i-1}g2_jf1_{i-j} \]

    同理容斥。

最後將塊拼接起來即可。

\(res_i\) 表示考慮 \(1∼i\) 的答案

則有轉移

\[res_i=\sum_{j=0}^{i-1}res_jf_{i-j,1}+res_jg_{i-j}+j!f_{i-j,1} \]

三項轉移分別是這一塊,不選這一塊,以這一塊為起點

時間複雜度為 \(O(n^2)\)

FFT能最佳化為 \(O(nlogn)\),不會多項式。

p

相關文章