HDU1711-----Number Sequence-----裸的KMP
来源:互联网 发布:gogoing知乎 编辑:程序博客网 时间:2024/06/05 12:49
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1711
题目意思:
找出b在a中的起始位置,没有则是-1
解题思路:
裸的KMP,不多说
不会KMP的话可以去看http://www.cppblog.com/oosky/archive/2006/07/06/9486.html
说的非常好
模板我是拿的大白的
代码:
#include<cstdio>#include<cstring>using namespace std;const int maxn = 10000+10;const int maxn2 = 1000000+10;int a[maxn2];int b[maxn];int next[maxn];void getnext(int T[],int len,int* qnext){ qnext[0] = 0; qnext[1] = 0; for(int i=1;i<len;i++) { int j = qnext[i]; while(j && T[i]!=T[j]) j = qnext[j]; qnext[i+1] = (T[i]==T[j])?j+1:0; }}int KMP(int S[],int T[],int len1,int len2){ getnext(T,len2,next); int j=0; for(int i=0;i<len1;i++) { while(j && S[i]!=T[j]) j = next[j]; if(T[j] == S[i]) j++; if(j==len2)//已经找到匹配串 { return i-len2+1; } } return -1;}int main(){ int t; scanf("%d",&t); int n,m; while(t--) { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<m;i++) scanf("%d",&b[i]); int ans = KMP(a,b,n,m); if(ans != -1) printf("%d\n",ans+1); else printf("-1\n"); } return 0;}
- HDU1711-----Number Sequence-----裸的KMP
- [裸KMP][HDU1711][Number Sequence]
- Number Sequence hdu1711 KMP
- hdu1711 Number Sequence,KMP
- hdu1711 Number Sequence (KMP)
- hdu1711 Number Sequence---KMP
- Number Sequence HDU1711 (kmp)
- HDU1711-Number Sequence-KMP
- hdu1711 number sequence KMP
- Hdu1711-Number Sequence-【KMP】
- HDU1711 Number Sequence(裸KMP)
- hdu1711 Number Sequence(KMP)
- HDU1711 Number Sequence KMP基础
- hdu1711 Number Sequence kmp算法
- hdu1711 Number Sequence(KMP)
- hdu1711--Number Sequence(KMP)
- hdu1711 Number Sequence(KMP水题)
- HDU1711-Number Sequence-KMP算法(模板)
- 【你有成功特质吗?】
- preprocessor-宏
- poj 1149 Pigs 网络流-最大流 建图的题目(明天更新)-已更新
- c语言结构体
- java垃圾回收机制
- HDU1711-----Number Sequence-----裸的KMP
- PythonChallenge 挑战之路 Level-25
- ViewController的生命周期分析和使用
- 写一个HTML页面,实现以下功能,左键点击页面时显示“您好”,右键点击 时显示“禁止右键”。并在2分钟后自动关闭页面。
- Qt for Embedded Linux (嵌入式linuxQT)
- ubuntu 基础学习-vi编辑器和gcc初级知识
- Linux文件系统十问,你知道吗?
- 深入探讨C++中的引用
- 关于pragma pack的用法(一)