题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3670

第一次写KMP算法...又T又WA了半天...

1. num 数组表示包括其本身的前缀后缀相同个数,所以 num[1] = 1 ;

2.指针开两个,不要一个来回移动,不然会惨 T;

num 数组、nxt 数组的定义一定要搞清楚才行呢...

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int const maxn=;
ll ans,mod=1e9+;
int n,nxt[maxn],num[maxn];
char a[maxn];
int rd()
{
int ret=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return ret*f;
}
int main()
{
n=rd();
while(n--)
{
// scanf("%s",&a+1);
cin>>a+;
int l=strlen(a+);
memset(nxt,,sizeof nxt);
memset(num,,sizeof num);
ans=; nxt[]=; num[]=;//
int nw=,nw2=;
for(int i=;i<=l;i++)
{
// int nw=nxt[i-1];
while(a[i]!=a[nw+]&&nw)nw=nxt[nw];
// if(nw==-1&&a[1]==a[i])nxt[i]=1;
// else
// nxt[i]=nw+1;
// nw=nxt[i];
if(a[i]==a[nw+])nw++;
nxt[i]=nw;
num[i]=num[nw]+;
// printf("num[%d]=%d\n",i,num[i]);
// printf("nxt[%d]=%d\n",i,nxt[i]);
while(a[i]!=a[nw2+]&&nw2)nw2=nxt[nw2];
if(a[i]==a[nw2+])nw2++;
while(nw2*>i)
{
// if(nw*2<=i)
// {
// num[i]=num[nw]+1;break;
// }
// cout<<nw<<endl;
nw2=nxt[nw2];
}
// printf("i:%d num=%d\n",i,num[i]);
(ans*=(num[nw2]+))%=mod;
}
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. (五)SQL入门 数据库查询
  2. Clipboard.js – 现代方式实现复制文本到剪贴板
  3. for循环下九九乘法表
  4. next_permutation()函数 和 prev_permutation() 按字典序求全排列
  5. Django学习--9 多对一关系模型
  6. FZU-1921+线段树
  7. BZOJ 3672: [Noi2014]购票( 树链剖分 + 线段树 + 凸包 )
  8. Cannot mix incompatible Qt library (version 0x40801) with this library (version 0x40804)
  9. javascript (二) 事件
  10. Mysql实现企业级数据库主从复制架构实战
  11. HTML5学习知识点
  12. [Abp vNext 源码分析] - 文章目录
  13. thinkphp 响应对象
  14. 【vue】vue +element 搭建项目,组件之间通信
  15. 浏览器打开exe文件
  16. 获取China大陆IP段的范围
  17. TSP-UK49687
  18. QuickStart系列:docker部署之PostgreSQL
  19. python 深拷贝、浅拷贝、引用
  20. java中excel导入\导出工具类

热门文章

  1. mysql、MariaDB的简单操作
  2. ResNet实战
  3. Python之面向对象方法
  4. C语言学习1
  5. java ssm框架 mapper文件里的#符号和$符号的区别
  6. 32道常见的Java基础面试题
  7. [luoguP1877] [HAOI2012]音量调节(DP)
  8. [网络流24题] 方格取数问题(cogs 734)
  9. [bzoj2982]combination_卢卡斯
  10. Network -UVa315(连通图求割点)