求恰好匹配 x
xx 長度比較困難,可以轉為求至少匹配 x
xx 長度的位置,再作差。
用kmp演算法可以求出每個位置最多匹配的長度,而這個長度其實是**於 nex
t[i]
,nex
t[ne
xt[i
]],.
..
next[i], next[next[i]], ...
next[i
],ne
xt[n
ext[
i]],
...
因此對於他們,求至少匹配 x
xx 長度的位置數,應加上他們可以推出的最長匹配長度的位置數。
#include
inline
intread()
const
int maxn =
2e5+5;
int n, m, q, nxt[maxn]
, f[maxn]
, cnt[maxn]
;char a[maxn]
, b[maxn]
;inline
void
get_nxt()
}inline
void
kmp()}
intmain()
return0;
}
題解 CH1809 匹配統計
首先不難想到字串hash的做法,列舉a中的每個位置,二分匹配長度即可,時間複雜度 o n 很明顯正解應該要用kmp,但對於匹配出的乙個f i 我們只能知道 有一次長度至少為f i 的匹配 同時還可能會漏掉一些匹配位,怎麼辦?基於值域的字首和 即令cnt x 長度至少為x的匹配位的個數,易得答案等於c...
題解 CH1809 匹配統計
首先不難想到字串hash的做法,列舉a中的每個位置,二分匹配長度即可,時間複雜度 o n 很明顯正解應該要用kmp,但對於匹配出的乙個f i 我們只能知道 有一次長度至少為f i 的匹配 同時還可能會漏掉一些匹配位,怎麼辦?基於值域的字首和 即令cnt x 長度至少為x的匹配位的個數,易得答案等於c...
CH1809 匹配統計 題解
看了好久才懂,我好菜啊 題意 給兩個字串 a 與 b 對於 q 次詢問,每次詢問給出乙個 x 求存在多少個位置使得 a 從該位置開始的字尾子串與 b 匹配的長度恰好為 x 這題可以 hash 二分 o n log n 過,還有乙個高階做法是擴充套件 kmp 然而並不會 正解的話,還是 kmp。但此題...