莫名想到了乙個結論,這種題可以找到選中的點形成的重心。
然後求所有點與重心距離的和即可。
原因是,任意乙個子樹大小均小於 \(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 可以發現概率的大小大概只與剩下的奇數 偶數段的個數有關,所以記錄奇數段的個數就可以轉移了。然後的問題是怎麼繼續考慮下一層。比較簡單的是奇數段,...