杭电 1711 Number Sequence(kmp)
2015-08-08 17:56
351 查看
[align=left]Problem Description[/align]
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.
[align=left]Input[/align]
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].
[align=left]Output[/align]
For each test case, you should output one line which only contain K described above. If no such K exists, output -1 instead.
[align=left]Sample Input[/align]
[align=left]Sample Output[/align]
[/code]
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.
[align=left]Input[/align]
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].
[align=left]Output[/align]
For each test case, you should output one line which only contain K described above. If no such K exists, output -1 instead.
[align=left]Sample Input[/align]
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
[align=left]Sample Output[/align]
6 -1 [code]#include<stdio.h> int a[1000002]; int s[10002],next[10002]; int m,n; void get_next()//首先我们要生成一个next数组 { int i=0,j=-1; next[0]=-1; while(i<m-1){ if(j==-1||s[i]==s[j])//什么?不会算next数组里面的值?赶快回炉深造去 { i++; j++; next[i]=j;//其实就是一位一位的递推 多模拟几遍就会了 } else j=next[j]; } } int kmp()//开始kmp算法 主要就是两个字符串比对 { int i=0,j=0; get_next(); while(i<=n-1) { if(j==-1||a[i]==s[j]) { i++; j++; } else j=next[j]; if(j==m)//如果j的值和m相等说明已经匹配到和s相同的一段了 我们也不需要再继续匹配了 return i-m+1;//i的值是匹配到s串的最后一位的值 } return -1; } int main() { int test,i; scanf("%d",&test); while(test--) { scanf("%d %d",&n,&m); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<m;i++) scanf("%d",&s[i]); printf("%d\n",kmp()); } return 0; }
[/code]
相关文章推荐
- UITextField(loading...)
- 使用StoryBoard做IOS UI界面跳转
- Android 蓝牙4.0 Bluetooth BLE 写数据(修改BLE设备的属性)
- UI06_UIScrollView
- 杭电1711Number Sequence
- 找不到类FeatureQuery解决办法
- RESTful API URI 设计: 查询(Query)和标识(Identify)
- Android中使用Build获取当前系统SDK版本
- EasyUI combotree 赋值
- MINIGUI学习总结一
- 论文注解《Query Languages for Graph Databases》graph数据库查询语法(II)
- [leedcode 232] Implement Queue using Stacks
- Netty官方指南: User guide for 4.x
- 根据位置信息提取 fasta 文件中的序列 -- extract fasta sequence by their position
- UI08_UITableView界面传值(后往前)
- UVA 1423 Guess 【拓扑排序】
- 深入分析Android (build/core/*.mk脚本)
- BlockingQueue
- poj 2229 Ultra-QuickSort (归并排序求逆序数对)
- Selenium2学习-033-WebUI自动化实战实例-031-页面快照截图应用之二 -- 区域截图