多校A層衝刺NOIP2024模擬賽21
T1 送信卒
簽到題
答案顯然具有單調性,考慮二分答案,然後使用跑 dj check。
時間複雜度 \(O(nm\log (nm)\log (V))\)
T2 共軛樹圖
特殊性質,樹形 DP
考慮鏈怎麼做,注意到一個性質,一條鏈上產生在 \(G\),將 \(G\) 中的邊放到原樹上是不交的,證明考慮反證法構造一個巢狀形式的邊是不可能的。
考慮 DP,設 \(f_{x,i}\) 表示考慮以 x 為根的子樹,\(x\) 可以考慮向上連 \(i\) 個祖先,注意祖先不一定相鄰,但是不相鄰是不影響方案數的。
轉移考慮從下向上列舉祖先轉移即可。
直接轉移是 \(O(n^3)\),最佳化考慮 \(f_{x,i}\) 與 \(f_{x,i+1}\) 和式之間只會相差一項,可以字首和最佳化。
這樣時間複雜度就能降低到 \(O(n^2)\)。
T3 摸魚軍訓
特殊性質,手模,線段樹二分
記 \(p_x\) 為 \(x\) 最初的位置。
對於一個詢問考慮三種情況。
-
\(k>n-x\),此時答案顯然為 \(x\)。
-
\(k\le cnt_{在 x 之前大於 x 的個數}\),此時答案為 \(p_x-cnt\),證明考慮氣泡排序是一個指標維護字首最大值。
-
\(k>cnt\),首先會進行第二種情況,記 \(k=k-cnt\),此時情況比較複雜,考慮簡化一下問題,此時只用考慮與 \(x\) 相比較的大小關係,將小於 \(x\) 看作 \(0\),將大於 \(x\) 看作 \(1\),手模一下發現每次氣泡排序會減去 \(x\) 後面第一個 \(1\),且其他的相對位置不變,所以可以考慮線段樹上二分找到位置。
由於第三種情況的問題轉化,得離線下來從大到小解決問題。
線段樹需要支援單點加,單調求和,樹上二分。
時間複雜度為 \(O(n\log n)\)。
T4 神奇園藝師
計數題,組合數學,最佳化式子
注意到每個集合的每個質數的貢獻是獨立的,且只與指數有關。
考慮怎麼計算一個集合的一個質數的貢獻。
因為貢獻為 \(\min\{\sum_i|r_i-p|\}\),經典結論 \(p\) 為中位數,證明考慮隨便選一個位置然後移動計算貢獻變化量。
這樣太傻了,考慮拆貢獻,由於 \(p\) 為中位數,所有小於 p 和大於 p 的個數相等,所以能兩兩匹配構成一個線段,而這兩個的貢獻和就為這個線段的長度,所以可以考慮字首和差分拆貢獻,即在中位數左邊的貢獻為 \(-r_i\) 在中位數右邊的貢獻為 \(r_i\)( 這樣如果沒有這個質因子,則不會有貢獻 ),考慮分開討論這兩種情況,然後可以列舉兩側的個數乘上組合數即可。這樣就能得到一個 \(O(n^3)\) 的做法。
考慮推式子最佳化。
上式為
兩個和式的關聯太弱了,考慮分討一種 \(a,b\) 之間的關係然後列舉它們之間的差值( 設為 \(d\) )。
以下為 \(a<b\) 的情況,省略了貢獻
同理可以推出 \(a>b\) 的方案數為 \(\sum_{d=}^{i-2}\binom{n-1}{d}\)。
發現上指標不變,所以可以字首和預處理組合數。
設 \(s_i=\sum_{d=0}^i\binom{n-1}{d}\),則貢獻為 \(r_i(s_{i-2}-s_{n-i-1})\)。
由於是指數不會太大,可以使用桶排。
時間複雜度為 \(O(n\log n)\)。