随笔分类 -  字符串—kmp

该文被密码保护。
posted @ 2019-03-16 19:30 lokiii 阅读(7) 评论(0) 推荐(0)
摘要:kmp,根据next数组的性质如果有答案的话就是n/(n (ne[n]+1)),否则是1 搬来打算用SA后来发现必须用DC3就没写 cpp include include include using namespace std; const int N=1000005; int n,ne[N]; c 阅读全文
posted @ 2018-11-20 19:04 lokiii 阅读(128) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-09-23 16:28 lokiii 阅读(5) 评论(0) 推荐(0)
摘要:n ne[n]是n的最长循环节长度,其实就是n 最短前缀=后缀长度 然后我们要求最短循环节,其实就是ne一直往前跳,跳到不能跳为止,这时的n ne[n]就是n的最短循环节长度 cpp include include using namespace std; const int N=1000005; 阅读全文
posted @ 2018-09-08 20:20 lokiii 阅读(138) 评论(0) 推荐(0)
摘要:kmp复健,答案是n next[n] cpp include include using namespace std; const int N=1000005; int n,ne[N]; char s[N]; int main() { scanf("%d%s",&n,s+1); int j=0; f 阅读全文
posted @ 2018-09-07 22:03 lokiii 阅读(153) 评论(0) 推荐(0)
摘要:有点神,按照1444的做法肯定会挂 注意到它的概率是相同的,所以可以简化状态 详见http://www.cnblogs.com/candy99/p/6701221.html https://www.cnblogs.com/liu runda/p/6919077.html 总之就是靠在kmp中的ne数 阅读全文
posted @ 2018-09-07 20:25 lokiii 阅读(156) 评论(0) 推荐(0)
摘要:神仙构造,做不来做不来 详见:http://vfleaking.blog.163.com/blog/static/174807634201329104716122/ cpp include include include include using namespace std; const int 阅读全文
posted @ 2018-08-20 20:25 lokiii 阅读(362) 评论(0) 推荐(0)
摘要:好久没写kmp都不会写了…… 开两个栈,s存当前串,c存匹配位置 用t串在栈s上匹配,栈每次入栈一个原串字符,用t串匹配一下,如果栈s末尾匹配了t则弹栈 cpp include include include using namespace std; const int N=1000005; int 阅读全文
posted @ 2018-05-09 10:49 lokiii 阅读(113) 评论(0) 推荐(0)
摘要:看n和k的范围长得就很像矩阵乘法了 设f[i][j]表示到第i个位置的后缀最长匹配目标串的j位。转移的话显然是枚举0~9,然后选择f[i+1]中能被他转移的加起来,需要用到next数组。然后构造矩阵的时候,在转移路径上++即可(注意代码里的f数组只是辅助构造矩阵的,和上文无关 在写挂了n次kmp之后 阅读全文
posted @ 2018-03-19 20:00 lokiii 阅读(138) 评论(0) 推荐(0)