白书说这个是MP,没有对f 数组优化过,所以说KMP有点不准确

#include <stdio.h>
int a,b;
int T[1000010],P[10010];//从0开始存
int f[10010];//记录P的自我匹配
void getFail(){
int m=b;
f[0]=f[1]=0;
for(int i=1;i<m;i++){
int j=f[i];
while(j&&P[i]!=P[j])j=f[j];
f[i+1]= P[i]==P[j] ? j+1 : 0;
}
} bool find(){
int len1=a,len2=b;
getFail();
int j=0;
for(int i=0;i<a;i++)
{
while(j&&P[j]!=T[i])j=f[j];
if(P[j]==T[i])j++;
if(j==b){printf("%d\n",i-b+2);return true;}
}
return false;
} int main(){
int cas,i;scanf("%d",&cas);
while(cas--){ scanf("%d%d",&a,&b);
for(i=0;i<a;i++)scanf("%d",&T[i]);
for(i=0;i<b;i++)scanf("%d",&P[i]);
bool ans=find();
if(ans==false)printf("-1\n");
}
return 0;
}

最新文章

  1. 【Redis安装学习】
  2. MySQL连接池
  3. 14)Java中Assert
  4. jquery图片轮播-插件
  5. Windows下配置PHP支持LDAP扩展方法(wampserver)
  6. XCode中Architecturs配置及常见问题
  7. iOS中使用nil NULL NSNULL的区别
  8. cssText设置css样式
  9. c#关于委托和事件
  10. js的逻辑 OR 运算符- ||
  11. lodash源码分析之chunk的尺与刀
  12. java final关键字的详解
  13. activiti数据库表结构剖析
  14. McQueenRPC源码阅读
  15. Oracle SQL——inner jion;left join;right join的区别和使用场景
  16. Java中异常发生时代码执行流程
  17. 疯狂JAVA——第四章 流程控制与数组
  18. 《图解Http》 2-6章: 基础,报文,状态码,首部。
  19. Linux下mysql基础命令(一)
  20. mysql8.0关闭log-bin功能

热门文章

  1. js之正则1
  2. (转)C#中两个问号和一个问号 ??
  3. shell脚本批量处理字符串
  4. Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC
  5. Linux下cutecom使用USB转串口线
  6. 理解RHEL上安装oracle的配置参数
  7. Event --mysql的scheduler.md
  8. 必填项(required)
  9. iPad上的Cookie到底有多长?
  10. 后台向前台输出 换行“\n”