做題記錄 ARC068D Solitaire

2022-09-18 15:15:12 字數 584 閱讀 3100

將 \(1\sim n\) 順序加入雙端佇列(每次可加頭可加尾),再刪除(每次可刪頭可刪尾),求有多少種刪除序列,使得 \(1\) 是第 \(k\) 個被刪的。

\(1\le n,k\le 2000\)。

這裡是乙個 \(o(n^2)\) 的做法,在這篇題解中有 \(o(n+q)\) 的線性做法。

考慮這個雙端佇列長什麼樣:應該是乙個以 \(1\) 為分割點,左邊是乙個單調下降序列,右邊是單調上公升序列

考慮刪除的第 \(k\) 個點要是 \(1\),彈出時是選擇兩端中的一端彈出,拆開彈出的序列,一部分為前端彈出的數,另一部分為後端彈出的數,於是這兩部分就是單調遞減的,且前 \(k-1\) 個數中其中乙個序列的最小值一定大於後 \(n-k\) 個數中的最大值。

然後因為在確定了 \(1\) 的位置後,之後隨便刪除,所以剩下的隨便排序,有 \(2^\) 種。

直接 dp:\(f_\) 表示前 \(k-1\) 個數中前 \(i\) 個數,這些數的最小值為 \(j\)。

\(f_\to f_(j\ge k)\)。

\(f_\to f_(k>j)\)

總時間複雜度 \(o(n^2)\)。

KMP做題記錄

題目太長不貼了 這道題很巧妙,給定乙個字串s,求最少在首尾新增幾個字元後,s變為乙個迴圈了n次的字串 n 1 假設我們有乙個迴圈串s abcabcabc 我們根據kmp求一次next陣列,就可以通過next strlen s 得到乙個迴圈節的位置從而求出迴圈節的長度,顯然,迴圈節能被s整除。如果s ...

8 25 9 25 做題記錄

2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...

8 25 9 25 做題記錄

2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...