HAOI2018 字串覆蓋

2022-05-25 13:48:10 字數 971 閱讀 9559

小c對字串頗有研究,他覺得傳統的字串匹配太無聊了,於是他想到了這樣乙個問題.

對於兩個長度為 \(n\) 的串 \(a, b\) , 小c每次會給出給出 \(4\) 個引數 \(s, t, l, r\) . 令 \(a\) 從 \(s\) 到 \(t\) 的子串(從 \(1\) 開始標號)為 \(t\),令 \(b\) 從 \(l\) 到 \(r\) 的子串為 \(p\).然後他會進行下面的操作:

如果 \(t\) 的某個子串與 \(p\) 相同,我們就可以覆蓋 \(t\) 的這個子串,並獲得 \(k - i\) 的收益,其中 \(i\) 是初始時 \(a\) 中(注意不是 \(t\) 中)這個子串的起始位置,\(k\)是給定的引數.乙個位置不能被覆蓋多次.覆蓋操作可以進行任意多次,你需要輸出獲得收益的最大值.

注意每次詢問都是獨立的,即進行一次詢問後,覆蓋的位置會復原.

對於所有資料,有 \(1 \le n, q \le 10^5\) ,\(a, b\) 僅由小寫英文本母組成,\(1 \le s \le t \le n, 1 \le l \le r \le n, n < k \le 10^9\).

對於 \(n = 10^5\) 的測試點,滿足 \(51 \le r - l \le 2000\) 的詢問不超過 \(11000\) 個,且 \(r - l\) 在該區間內均勻隨機.

考試時看到這道題名稱是cover,就決定寫這篇題解。。。。

其實是很煩的一道題,,全靠那個神仙的條件保證複雜度。。。

因為「\(51 \le r - l \le 2000\) 的詢問不超過 \(11000\) 個」,而對於每個詢問,對答案有貢獻的串不超過\(n/(r-l+1)\)個,算一算發現這\(11000\)個詢問總共不會訪問到40w個串。。。也就是說,每次線段樹暴力找後繼就可以了。。。。

對於\(r-l<51\)的情況,顯然串的總數不超過\(50n\)。離線,相同長度的串一起處理,用hash快速求出和當前位置的串相同的最近的下一位置。然後倍增一下就好啦。

太醜了,不放了。

NHOI2018 字串變換

題目描述 給你乙個全部由大小寫字母組成的字串,你每次可以將乙個小寫字母變換成對應的大寫字母,或把乙個大寫字母變換成對應的小寫字母。請問 至少要進行多少次變換才可以使整個字串全部由大寫字母或全部由小寫字母組成?輸入資料 輸入共 1 行,為乙個僅由大小寫字母組成的字串。輸出資料 輸出共 1 行,1 個整...

網易2018校招 03 字串碎片

乙個由小寫字母組成的字串可以看成一些同一字母的最大碎片組成的。例如,aaabbaaac 是由下面碎片組成的 aaa bb c 牛牛現在給定乙個字串,請你幫助計算這個字串的所有碎片的平均長度是多少。輸入描述 輸入包括乙個字串s,字串s的長度length 1 length 50 s只含小寫字母 a z ...

字串1 字串的旋轉

題目描述 給定乙個字串,要求將字串前面的若干個字元移到字串的尾部。例如 將字串 abcdef 的前三個字元 a b c 移到字串的尾部,那麼原字串將變成 defabc 首先想到的是將需要移動的字元乙個乙個移到字串的尾部。實現如下 public class transfet s n 1 t publi...