學軍聯賽模擬 第十八測 題解

2022-05-04 23:09:08 字數 959 閱讀 7802

\(a.\)

首先有個樸素的動態規劃思路 , 記 \(f_\) 表示前 \(i\) 個位置 , 最後乙個位置的顏色是 \(j\) 的方案數。

轉移要用到容斥原理 , 用總方案數減去 \(j\) 連續出現 \(a_ + 1\) 次的方案數。 記 \(g_ = \sum}\)。 則 \(f_ = g_ - (g_ - 1} - f_ - 1 , j})\)。

注意到對於 \(a_\) 相同的顏色顯然狀態相同 , 可以分批轉移。 時間複雜度 : \(o(n ^ 2)\)

\(b.\)

二分答案 , 將每個數減去 \(x\) , 那麼要求的轉化為序列中總和大於 \(0\) 的區間個數。

這個問題可以用樹狀陣列等資料結構求解二維偏序得到。

但事實上可以不用資料結構 , 因為插入排序的時間複雜度是 \(o(逆序對個數)\) , 所以可以直接執行插入排序 , 如果超過 \(k\) 次交換操作就直接返回。

這樣的時間複雜度是 \(o(nlogn)\) 的。

附核心** :

記 \(dp_\) 表示考慮了前 \(i\) 個字串 , 乙個拼合串的字尾為 \(s_\) , 另乙個為 \(s_\) 的最短長度。

考慮優化 , 不妨將字串記進狀態 , 記 \(dp_\) 表示前 \(i\) 個字串 , 有乙個串字尾為 \(s_\) , 另乙個有乙個字尾是 \(s\) 的最短長度。

不妨建立字典樹儲存狀態。

這樣就有兩種狀態 :

第一種 , 接在上乙個串後面 , 這樣相當於給所有的狀態加上乙個數 , 可以直接在字典樹上打標記。

第二種 , 和某乙個串"縮"起來 , 這樣可以在字典樹上取 \(min\) 得到 , 對於這種情況 , 還需列舉當前串的乙個字尾更新樹上的節點。

時間複雜度 : \(o(nm)\)

程式設計第十八題

rpg girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,rabbit只願意和xhd或pqk做partner,grass只願意和l...

100題 第十八題(約瑟夫迴圈)

一,題目 n個數字 0,1,n 1 形成乙個圓圈,從數字0開始,每次從這個圓圈中刪除第m個數字 第乙個為當前數字本身,第二個為當前數字的下乙個數字 當乙個數字刪除後,從被刪除數字的下乙個繼續刪除第m個數字。求出在這個圓圈中剩下的最後乙個數字。三,原始碼 include include malloc....

dp專題 第十八題 買書

1 簡單描述 小明手裡有n元錢全部用來買書,書的 為10元,20元,50元,100元。有多少種買書的方案。注意 n元錢必須全部用來買書,每種書的數目不限。2 思路 完全揹包問題 include using namespace std int v 10 int f 1010 i,j,n intmain...