noi前第十六場 題解

2022-03-16 17:57:37 字數 970 閱讀 8640

莫名想到了乙個結論,這種題可以找到選中的點形成的重心。

然後求所有點與重心距離的和即可。

原因是,任意乙個子樹大小均小於 \(m\),所以總可以構造出方案。

在這道題中,只要列舉最接近 \(1\) 號點的可能的重心,然後計算方案數就可以 \(o(n^3)\)。

仔細想一下,可以把每個點到達重心的距離攤到每條邊的貢獻上。

直接套用上面得出的結論,可以知道貢獻的係數就是 \(\min\\),然後隨便寫寫這題就沒了。

首先斷環成鏈,把所有相鄰並且相同的位置打個標記。

每次的操作就是要求覆蓋環內所有標記,找出位置不同的兩個點,然後做類似卷積的東西。

發現不會做,但是可以想一想暴力。

因為左右端點每次都是右移一位,每次的變化量並不大,所以只要考慮新加入的右端點的貢獻。

寫個類似鍊錶的東西剪剪枝,\(o(n^2)\) 就過了。

正解是這樣的,考慮乙個環在刪除一段後保留的,也是一段連續區間。

所以可以直接由該字串,拆出若干段區間,對其中每一段區間考慮首尾不同的限制。

因為拆出的區間是不交的,可以線性去列舉每個能保留的長度。

考慮不合法的情況,一定是說整個字串存在乙個該長度+1大小的迴圈節。

所以用 \(kmp\) 求個 \(border\) 來判斷是否存在迴圈節就完了。

可以發現這樣乙個事情,總存在乙個周長為 \(2\max\+2\) 的方案。

所以答案一定跨過 \(y=\frac\) 或者 \(x=\frac\)。

兩個問題是等價的,可以分別分治去求。

每次只要解決跨過 \(l,r\) 中點 \(mid\) 的答案。

所以要求的大概是 \(\min \limits_\+\min\+c_i+c_j \}\)。

這是乙個二維數點問題,只要對其中一維排序,用資料結構維護另一維即可。

還有乙個單 \(\log\) 的做法,直接衝乙個單調棧維護最值。

然後用線段樹維護區間修改、全域性最大值就好了。

noi前第十七場 題解

考慮這樣乙個做法,對於每個點處理出左側和右側分別的最優決策點,然後比較二者誰更優即可。當然這樣的點可以表示為若干個區間,對於其中每個區間,左右側誰更優是單調的,可以通過二分求解。所以問題就是如何處理出這樣的若干個區間。可以想到這個最優決策點就是上凸包會切到的點。所以寫乙個單調棧維護就好了。學習了一下...

noi前第十四場 題解

做過類似的題,思路大概將所有數從大到小插入。這樣相鄰兩個位置的貢獻就轉化為一加一減。可是這樣做會導致值域變得很大,其實這樣沒用到題中 l 很小的限制。考慮這樣乙個做法,把每次一加一減的貢獻差分掉。每次基準線降低的時候直接統計 降低的高度 降低的個數 的貢獻。因為這個貢獻是不降的,所以維護到 l 就夠...

noi前第十三場 題解

可以發現大概問題是一層一層的。對於每一層,一定會選完所有長度為 2x,2x 1 的連續段之後遞迴下一段。可以考慮將這樣的選擇合併在一起考慮,然後做乙個 dp 可以發現概率的大小大概只與剩下的奇數 偶數段的個數有關,所以記錄奇數段的個數就可以轉移了。然後的問題是怎麼繼續考慮下一層。比較簡單的是奇數段,...