hdu 1711 KMP模版题
2016-04-08 09:33
211 查看
点击打开链接
题意: 找模式串在文本串中首次出现的位置;
分析:, 数据量比较大, 因此要用KMP来解决,套上KMP模版就行了;
题意: 找模式串在文本串中首次出现的位置;
分析:, 数据量比较大, 因此要用KMP来解决,套上KMP模版就行了;
#include<bitset> #include<map> #include<vector> #include<cstdio> #include<iostream> #include<cstring> #include<string> #include<algorithm> #include<cmath> #include<stack> #include<queue> #include<set> #define inf 0x3f3f3f3f #define mem(a,x) memset(a,x,sizeof(a)) #define F first #define S second using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; inline int in() { int res=0;char c;int f=1; while((c=getchar())<'0' || c>'9')if(c=='-')f=-1; while(c>='0' && c<='9')res=res*10+c-'0',c=getchar(); return res*f; } const int N=1000110; int Next[10010]; int a ,b[N/10]; int main() { int T=in(); while(T--) { int n=in(),m=in(); for(int i=0;i<n;i++) scanf("%d",a+i); for(int i=0;i<m;i++) scanf("%d",b+i); int k=-1,j=0; Next[0]=-1; while(j<m) { if(k==-1 || b[k]==b[j]) Next[++j]=++k; else k=Next[k]; } int i=0; j=0; while(i<n && j<m) { if(j==-1 || a[i]==b[j]) i++,j++; else j=Next[j]; } if(j==m) printf("%d\n",i-j+1); else puts("-1"); } return 0; }
相关文章推荐
- IO协议栈前沿技术研究动态
- python(12)给文件读写上锁
- linux下打印带有颜色的字体
- Linux chkconfig --查询/修改系统服务的运行级别
- Linux chgrp --修改文件或目录的所属群组
- Qt 示例学习--1. 1 qml实现list
- 自定义tabBar如何移除系统自带的TabBarItemButton
- Qt标准对话框之QMessageBox
- 卡片式UI的总结 android
- JSON资料整理(转)
- serialVersionUID的作用
- PHP实现基于mysqli的Model基类完整实例
- Qt5.4以上版本使用MySQL数据库(避免各种坑)
- Storm记录02-- Storm是什么
- 参考文献的悬挂缩进
- Oracle database sqldeveloper study(1)
- 统计中文分词(最大熵)
- JAVA学习作品之销售管理系统V1.1
- Linux chattr --配置文件案隐藏属性
- 线性表的有关操作