题意:裸kmp

思路:kmp模板

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std; #define MaxSize 10005 int s[],t[];
int next2[MaxSize]; void GetNext(int t[],int len){//求next数组
int j,k;//,len;
j=;
k=-;
next2[]=-;
//len=strlen(t);
while(j<len){
if(k==-||t[j]==t[k]){
++j;
++k;
next2[j]=k;//此句可由优化替代
/*优化(仅保证求KMPIndex时可用。谨慎使用。)
if(t[j]!=t[k])next[j]=k;
else next[j]=next[k];
*/
}
else k=next2[k];
}
} int KMPIndex(int s[],int t[],int lens,int lent){//求子串首次出现在主串中的位置
int i,j;//,lens,lent;
i=j=;
//lens=strlen(s);
//lent=strlen(t); while(i<lens&&j<lent){
if(j==-||s[i]==t[j]){
++i;
++j;
}
else j=next2[j];
}
if(j>=lent)return i-lent+;
else return -;
} int KMPCount(char s[],char t[]){//统计子串在主串中的出现次数,可重叠
int i,j,lens,lent,cnt;
i=j=;
lens=strlen(s);
lent=strlen(t);
cnt=; while(i<lens){
if(j==-||s[i]==t[j]){
++i;
++j;
}
else j=next2[j];
if(j==lent)++cnt;
}
return cnt;
} void KMPCount2(char t[]){//统计单串中从某个位置以前有多少重复的串
int i,lent,tmp;
lent=strlen(t); for(i=;i<=lent;++i){
tmp=i-next2[i];
if(i%tmp==&&i/tmp>)
printf("\t位置:%d 个数:%d\n",i,i/tmp);
}
} int main(){
int tt,n,m,i;
scanf("%d",&tt);
while(tt--){
scanf("%d%d",&n,&m);
for(i=;i<n;++i)
scanf("%d",&s[i]);
for(i=;i<m;++i)
scanf("%d",&t[i]);
GetNext(t,m);
printf("%d\n",KMPIndex(s,t,n,m));
}
return ;
}

最新文章

  1. C#递归遍历子目录与子目录中的文件
  2. C# WinForm 中 MessageBox的使用详解
  3. 赞!jsPDF – 基于 HTML5 的强大 PDF 生成工具
  4. iOS开发拓展篇—音乐的播放
  5. python 拷贝文件夹下所有的文件到指定文件夹(不包括目录)
  6. 链表:删除链表中重复的结点(java实现)
  7. oracle中substr函数的用法
  8. PV操作,
  9. cocosbuilder学习汇总
  10. RSA算法原理(二)
  11. Demo_CS(移动,切换枪支,发射子弹)
  12. HDU_1174——爆头,空间直线方程,直线到点的距离
  13. 俄罗斯方块:win32api开发
  14. eclipse导入myeclipse的web项目没法识别问题解决方法
  15. HDU1236:排名
  16. gen_grant_dml.sql
  17. Java编程规范(一)
  18. 201521123004 《Java程序设计》第1周学习总结
  19. linux下面的fd限制
  20. 【面试必备】Swift&amp;nbsp;面试题及其答案

热门文章

  1. IOS 教你玩转UITableViewController和TableView
  2. python 中的电子邮箱的操作
  3. 重温.NET下Assembly的加载过程 ASP.NET Core Web API下事件驱动型架构的实现(三):基于RabbitMQ的事件总线
  4. Long-term stable release maintenance
  5. Android添加系统级顶层窗口 和 WindowManager添加view的动画问题
  6. 基于tornado实现的web聊天室
  7. KVM技术
  8. 记录-外挂recovery的制作(魅蓝note)
  9. Canvas学习笔记——缓动
  10. c# CacheManager 缓存管理