HDU Number Sequence (KMP模板)
2017-09-14 19:32
351 查看
Number Sequence
基础KMP模板题目;
我的模板与网上的模板也不太一样
具体我的思想参考视频
视频链接
下面代码
#include<stdio.h> #include<string.h> #include<string> #include<iostream> using namespace std; const int maxn=1000000+10,MAXN=1000000+10; int a[MAXN],b[maxn]; int nextl[maxn]; int main() { int T; scanf("%d",&T); while(T--) { int len1,len2; scanf("%d%d",&len1,&len2); for(int i=0; i<len1; i++) { scanf("%d",&a[i]); } for(int i=0; i<len2; i++) { scanf("%d",&b[i]); } if(len1<len2) { printf("-1\n"); continue; } int i=0,j=1; nextl[0]=0; memset(nextl,0,sizeof(nextl)); while(j<len1)//建立nextl数组 { if(b[i]==b[j]) { nextl[j]=i+1; i++,j++; } else if(b[i]!=b[j]&&i!=0) { i=nextl[i-1]; } else { nextl[j]==0; j++; } } // for(int x=0; x<len2; x++) // { // printf("%d ",nextl[x]); // } // printf("\n"); i=0,j=0; int flag=0; while(i<=len1)//对a数组进行匹配 { if(j>=len2) { flag=1; // printf("*-*\n"); break; } // printf("%d %d\n",i,j); if(a[i]==b[j]) { i++,j++; } else if(a[i]!=b[j]&&j!=0) { j=nextl[j-1]; } else { i++; } } if(flag==1) { printf("%d\n",i-len2+1); } if(flag==0) { printf("-1\n"); } } }
相关文章推荐
- HDU - 1711 Number Sequence (KMP模板)
- KMP模板
- hdu 2594 Simpsons’ Hidden Talents(kmp模板)
- kuangbin专题十六 HUD2087 KMP模板题
- KMP最常用的模板
- HDU 1711 Number Sequence(KMP:找模板第一次出现的位置)
- POJ 3461 Oulipo(KMP模板)
- KMP模板
- POJ 3461 Oulipo(KMP模板)
- 算法学习之KMP(模板整理)
- kmp-模板-hd-1711
- HDU 2087 剪花布条 KMP极其初级之入门题(KMP模板在这里)
- KMP模板
- [POJ 3461] Oulipo & KMP模板
- 【KMP】 模板
- KMP模板
- POJ3461(KMP模板题)
- hdu 1711Number Sequence(kmp模板题)
- KMP模板与讲解
- KMP模板