HDU 1711 Number Sequence
来源:互联网 发布:如何成为淘宝摄影师 编辑:程序博客网 时间:2024/06/07 07:12
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
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
题意:给定两个数组,输出第一个数组中与第二个数组完全匹配的首个元素的位置,若不能匹配,输出-1
思路:
N最大为1000000,用KMP算法
#include <iostream>using namespace std;int N,M;int a[1000010],b[10005],Next[10005];void getNext()//得到数组b中每个元素的next值{ Next[0]=-1; int k=-1,j=0; while(j<M) { if(k==-1||b[k]==b[j]) { k++; j++; Next[j]=k; } else k=Next[k];//递归找长度更短的相同前缀后缀 }}int KMP(){ int i=0,j=0; while(i<N&&j<M) { if(j==-1||a[i]==b[j])//若匹配,移动到下一位 { j++; i++; } else j=Next[j];//不匹配,i不变,下标j移动到数组b中上一个值为b[j]的位置 } if(j==M) return i-j+1; else return -1;}int main(){ int T,ans; cin>>T; while(T--) { cin>>N>>M; if(M<=N) { for(int i=0;i<N;i++) cin>>a[i]; for(int i=0;i<M;i++) cin>>b[i]; getNext(); ans=KMP(); cout<<ans<<endl; } else//若M>N,不能匹配 cout<<"-1"<<endl; }}
- hdu 1711 Number Sequence
- hdu 1711 Number Sequence
- hdu 1711 Number Sequence
- Hdu-1711 Number Sequence
- hdu 1711 Number Sequence
- HDU 1711 Number Sequence
- HDU 1711 Number Sequence
- hdu 1711 Number Sequence
- HDU-1711-Number Sequence
- hdu 1711 Number Sequence
- Hdu 1711 - Number Sequence
- hdu 1711 Number Sequence
- HDU 1711 Number Sequence
- HDU 1711 Number Sequence
- HDU-Number Sequence -1711
- hdu 1711 number sequence
- HDU 1711 Number Sequence
- Number Sequence hdu 1711
- Linux下文件操作预习
- 实验四
- iOS判断输入框的字符为8-15位纯数字或者英文
- 双击返回键才退出整个应用
- 添加查询排序过滤
- HDU 1711 Number Sequence
- springboot(六)jar快速运行
- 王怡 | 历史是大写的基督
- Android动画深入分析
- Android的Html类分析与扩展
- hdoj 1715 大菲波数
- 安装Flask-Mysqldb
- 素数和回文数
- 初学Html5+CSS之用表格创建添加信息表+省市联动+删除