noi前第十場 題解

2022-03-16 18:16:05 字數 483 閱讀 8056

可以直接寫出乙個簡單的 \(dp\),然後發現這個 \(dp\) 的資訊只需要存 \(a\) 集合選的個數和末尾選的哪個集合。

不妨寫成乙個多項式,那麼我們只關心邊界的情況。

所以寫乙個分治 \(fft\) 即可。

考慮對於每條邊,列舉所有能到達這條邊的角度,計算出合法的面積。

所以只需要對角度進行積分即可。

為了方便地計算出這個東西,可以對邊的左右端點分別積分,計算每個角度的射線以右的面積。

發現單點求值只需要在凸包上二分即可計算出來,所以寫個辛普森積分就完了。

要求的是 \(\sum \limits_\frac\)

這個組合數可以用類似範德蒙恒等式的東西,開乙個桶並暴力查桶,來做到 \(o(n * \sum \limits_a_ib_i)\) 求出對於每個 \(i\) 的答案。

其實這個問題還等價於對於所有的路徑求和。

發現值域不大,而且只需要輸出乙個數,所以在三維網格上 \(dp\) 一下即可。

noi前第十七場 題解

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

noi前第十三場 題解

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

2019牛客第十場題解 C F

題意 第i天在原來字串的基礎上在字串的前面或者後面新增乙個字元。問新增完字元後有多少種不同長度的迴圈節。定義迴圈節為能把原字串分割成長度為k的乙個或多個部分。並且後面可以有或者沒有迴圈節的開頭部分。也就是說 s 1 s n x s x 1 s n 則說明迴圈節為x 1.明顯,對於長度為len的字串,...