hdu 1711 Number Sequence -- (KMP 求数列第一匹配的位置)
2016-05-24 21:23
471 查看
Number Sequence
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 19786 Accepted Submission(s): 8498
Problem Description
Given two sequences of numbers : a[1], a[2], ...... , a
, 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
.
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
2
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 1 3
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 2 1
Sample Output
6
-1
#include <stdio.h> #include <string.h> #define N 1000005 int t ,w ; int next ; int n,m; void get_next(int *a,int len){ next[0]=-1; int i=0,j=-1; while(i<len){ if(j==-1||a[i]==a[j]){ if(a[++i]==a[++j]) next[i]=next[j]; else next[i]=j; } else j=next[j]; } } int KMP(int *a,int *b){ //a是主串 int i=0,j=0; int sum=0; get_next(b,m); while(i<n&&j<m){ if(j==-1||a[i]==b[j]) i++,j++; else j=next[j]; if(j==m){ return i-j+1; } } return -1; } int main(){ int T,i; scanf("%d",&T); while(T--){ scanf("%d %d",&n,&m); for(i=0;i<n;i++) scanf("%d",&t[i]); for(i=0;i<m;i++) scanf("%d",&w[i]); printf("%d\n",KMP(t,w)); } return 0; }
相关文章推荐
- @Intellij IDEA生成serialVersionUID的方法
- Codeforces Round #327 (Div. 2)-Wizards' Duel
- VB语言COM组件开发GUID指定方法
- UIButton(UIEdgeInsets)/设置button上的文字和图片上下垂直居中对齐
- UESTC 1253 阿里巴巴和n个大盗(博弈)
- iOS开发之高级视图—— UITableView(一)简单例子
- HDU 4198 Quick out of the Harbour(BFS+优先队列)
- EasyUI ComboTree(树形下拉框) 简单实例
- js EasyUI前台 全选的实现
- 使用dev_queue_xmit发送定制报文
- dev_queue_xmi函数详解
- 关于EasyUI的combobox的data属性以及它的运作过程
- iOS - 封装 - UIAlertController
- 工具类系列-RequestRedirectUtil
- 使用XML布局文件和java代码共同控制UI界面做一个简易图片浏览器
- 测试hibernate时报错Field 'id' doesn't have a default value
- Java GUI之(JRadioButton、JCheckBox、JTextArea)实例
- SAP Web IDE - sapui5开发工具
- Android酷炫实用的开源框架(UI框架)
- 工具类系列-DataFilterQueue