P3370 [CTSC2017]密鑰 題解
先來考慮最簡單的暴力做法:從 ?開始,一個一個枚舉
?和
?的數(shù)量,對其進行判斷,最后求解。 ?
考慮優(yōu)化一下:將 ?當作
,
?當作
。進行加和后再去比較。 ?
繼續(xù)優(yōu)化,可以使用前綴和。
根據(jù)題目中對“強的”的定義,我們可以證明如下結論: ?
?強的字母(
?或
)一共有
?個。
?證明:我們將
?看作
,
?看作
。 ?
?那么整個序列的前綴和就是由
?分割成的若干段區(qū)間組成的。并且這些區(qū)間一定全為同號(即一個區(qū)間內,要么全為正,要么全為負)。
因此,前面兩個小問就可以通過我們剛剛所推得的結論轉化成第三個小問。 ?
特別地,我們將 ?看作
,并令
?為整個序列的前綴和。記原序列中
?的位置為
。 ?
考慮一個強的 (其所在位置為
)。 ?
若它在 ?后面,則滿足
??
否則,滿足 ??
推廣得到:若有 ?個強的
,則一定存在
?個
?滿足
?或者
。
因此,對于每個? 的位置,求出有序二元組
?的第
?小元素,就是最終的答案。
可以考慮計數(shù)排序(初賽剛搞過)。時間復雜度 。
Code:
標簽: