HDU 1711 Number Sequence (KMP模板题)
来源:互联网 发布:淘宝千人千面影响 编辑:程序博客网 时间:2024/06/06 16:30
Number Sequence
Problem Description
Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <= N <= 1000000). Your task is to find a number K which make a[K] = b[1], a[K + 1] = b[2], ...... , a[K + M - 1] = b[M]. If there are more than one K exist, output the smallest one.
Input
The first line of input is a number T which indicate the number of cases. Each case contains three lines. The first line is two numbers N and M (1 <= M <= 10000, 1 <= N <= 1000000). The second line contains N integers which indicate a[1], a[2], ...... , a[N]. The third line contains M integers which indicate b[1], b[2], ...... , b[M]. All integers are in the range of [-1000000, 1000000].
Output
For each test case, you should output one line which only contain K described above. If no such K exists, output -1 instead.
Sample Input
213 51 2 1 2 3 1 2 3 1 3 2 1 21 2 3 1 313 51 2 1 2 3 1 2 3 1 3 2 1 21 2 3 2 1
Sample Output
6-1
分析:KMP算法模板题。具体见代码
AC代码:
#include<cstdio>#include<cstring>using namespace std;const int maxn1=1e6+10;const int maxn2=1e4+10;int a[maxn1];int b[maxn2];int next[maxn2];int N,M;void get_next(){next[0]=0;int k=0;for(int p=1;p<M;p++){while(k>0 && b[k]!=b[p]){k=next[k-1];}if(b[k]==b[p])k++;next[p]=k;}}void KMP(){get_next();int k=0;int i=0; while(k<M && i<N){ if(a[i]==b[k]){ i++;k++;} else if(k==0) //当匹配长度为0时 i++; else k=next[k-1];}if(k==M)printf("%d\n",i-M+1);else printf("-1\n");}int main(){int T;scanf("%d",&T);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]);KMP();}return 0;}
1 0
- [KMP模板题]HDU-1711 Number Sequence
- hdu 1711 Number Sequence KMP模板题~~~
- hdu 1711 Number Sequence KMP模板题
- hdu 1711 Number Sequence(kmp模板题)
- hdu 1711Number Sequence(kmp模板题)
- hdu 1711 Number Sequence KMP模板题
- Hdu 1711 Number Sequence (kmp模板题)
- HDU - 1711 Number Sequence (KMP模板)
- HDU 1711 Number Sequence(kmp模板)
- HDU 1711 Number Sequence(KMP 模板)
- HDU 1711 Number Sequence(KMP模板)
- hdu 1711 Number Sequence(KMP模板题)
- hdu 1711 Number Sequence(KMP入门模板题)
- HDU 1711 Number Sequence (KMP模板题)
- Hdu 1711 Number Sequence ( KMP 模板题)
- 【KMP模板】HDU 1711 Number Sequence
- Kmp 模板 之 hdu 1711 Number Sequence
- HDU 1711 Number Sequence(KMP模板)
- 重放攻击
- python基础入门
- URAL 1992 CVS
- struts2之数据处理的三种方式
- 几道典型的递归算法例题
- HDU 1711 Number Sequence (KMP模板题)
- 十三、JDK的命令行工具
- while(cin>>word) 分析
- vmware虚拟机ubuntu和red hat等vmware tools安装问题
- jq实现二级下拉菜单动画效果
- Spark源码分析之分区器的作用
- spring源码-1- xml的加载与注册
- JAVA 读取Properties配置文件
- springmvc之@InitBinder注解