随笔分类 - 字符串——KMP
摘要:"there" cpp include include using namespace std; int n, m, mod, nxt[25], too[25][15]; char ss[25]; struct Matrix{ int num[25][25]; Matrix operator (co
阅读全文
摘要:先差分一下,钦定一个模式串,答案是这个模式串的所有后缀与其它串的最小的相同的的最大的。 cpp include include include using namespace std; int n, a[1005][1005], len[1005], nxt[1005], ans=0; void g
阅读全文
摘要:```cpp #include #include #include using namespace std; int nxt[1000005], len; char a[1000005]; void mknxt(){ int i=0, j; nxt[0] = j = -1; while(i0) i += k + 1; else j += k + 1; if(i==j) j+...
阅读全文
摘要:nxt数组下标从1开始而a,b数组下标从0开始。 cpp include include include using namespace std; int lena, lenb, nxt[1000005]; char a[1000005], b[1000005]; void mknxt(){ int
阅读全文
摘要:推导 表示母串 和子串 的最长公共前缀。 表示 和`t[1..lent]`的最长公共前缀。 假设 已经算好,现在想求 。 我们先找出 中, 的最大值 ,并且记此时的 为`a`。 可知 ,自然有 ,记 。 出现两种情况: 这样会发现有未知情况,因此就再度匹配,直至适配,然后更新 。 cpp int l
阅读全文
摘要:考虑dp[i]代表前缀s[1...i]出现的次数,必定有dp[nxt[i]] += dp[i] 倒着推就是了 cpp include include include using namespace std; int T, n, nxt[200005], dp[200005], ans; const
阅读全文
摘要:考虑一下: 和 就明白了 cpp include include include using namespace std; int len, nxt[1000005]; char a[1000005]; void mkkmp(){ int k=0; for(int i=2; i
阅读全文

浙公网安备 33010602011771号