博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kmp-洛谷P2375 动物园
阅读量:5083 次
发布时间:2019-06-13

本文共 1710 字,大约阅读时间需要 5 分钟。

因为有一个限制,我们不能简单的处理;
首先,当i满足限制条件时,对于i+1,我们如果用i的限制条件去更新i+1,那么i+1会有错误;
所以我们要先跑一边无限制的kmp,然后再去求出限制的kmp;
限制有两种;
一是限制next数组(p[])
一是限制sum数组;
这个见代码,都是大神帮我调的5555;
还有我的kmp要预处理i=1的情况;
这个好麻烦;

/*#include
#include
#include
#define Ll long longusing namespace std;char s[2000001];Ll p[1000005],sum[1000005],P[1000005];Ll n,m,ans,mo=1000000007;void make(char s[]){ p[1]=0;sum[1]=1; for(int i=2;i<=m;i++){ int j=p[i-1]; while(j&&s[j+1]!=s[i])j=p[j]; p[i]=j;sum[i]=sum[j]+1; // cout<
<<' '<
<
i)||(j&&s[j+1]!=s[i]))j=p[j]; if(s[j+1]==s[i])j++; P[i]=sum[j]; }}int main(){ scanf("%lld",&n); while(n--){ scanf("%s",s+1);m=strlen(s+1); make(s); make2(s); ans=1; for(int i=1;i<=m;i++)ans=ans*(P[i]+1)%mo; printf("%lld\n",ans); }}*/#include
#include
#include
#define Ll long longusing namespace std;char s[2000001];Ll p[1000005],sum[1000005],P[1000005];Ll n,m,ans,mo=1000000007;void make(char s[]){ p[1]=0;sum[1]=1; for(int i=2;i<=m;i++){ int j=p[i-1]; while(j&&s[j+1]!=s[i])j=p[j]; if(s[j+1]==s[i])j++; p[i]=j;sum[i]=sum[j]+1; }}void make2(char s[]){ P[1]=0; int j=0; for(int i=2;i<=m;i++){ if(j*2+2>i)j=p[j]; while(j&&s[j+1]!=s[i])j=p[j]; if(s[j+1]==s[i])j++; P[i]=sum[j]; }}/*void make2(char s[]){ P[1]=0; for(int i=2;i<=m;i++){ int j=P[i-1]; if(j*2+2>i)j=p[j]; while(j&&s[j+1]!=s[i])j=p[j]; if(s[j+1]==s[i])j++; P[i]=j; }}*/int main(){ scanf("%lld",&n); while(n--){ scanf("%s",s+1);m=strlen(s+1); make(s); make2(s); ans=1; for(int i=1;i<=m;i++)ans=ans*(P[i]+1)%mo; /*for(int i=1;i<=m;i++)ans=ans*(sum[P[i]]+1)%mo;*/ printf("%lld\n",ans); }}

转载于:https://www.cnblogs.com/largecube233/p/6797900.html

你可能感兴趣的文章
P3254 圆桌问题
查看>>
MapReduce的运行原理
查看>>
Leetcode: Partition List
查看>>
故障转移
查看>>
清空dataset中的某行某列的数据
查看>>
盒模型
查看>>
js中闭包和作用域
查看>>
CI框架整合UEditor编辑器上传功能
查看>>
树的层号表示
查看>>
最大整数
查看>>
[转] 数据模型建设的几点思考与总结
查看>>
[1].Common SSIS Applications
查看>>
stm8s + si4463 寄存器配置
查看>>
Asp.NetCore取配置信息
查看>>
自动变量提示
查看>>
css中盒模型的理解与整理
查看>>
Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别
查看>>
如果你是程序员,这些细节会害死你(3)
查看>>
xmlhttp的OnReadyStateChange事件
查看>>
python连接oracle数据库
查看>>