hdu——1711——Number Sequence
来源:互联网 发布:js获取当前日期 编辑:程序博客网 时间:2024/06/14 13:19
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
#include <iostream>using namespace std;int next[100000];int n,m;int s1[1000000];int s2[10000];void getnext(){ int j=0; int k=-1; next[0]=-1; while(j<m-1) { if(k==-1||s2[j]==s2[k]) { j++; k++; next[j]=k; } else k=next[k]; }}int kmp(){ int i=0; int j=0; while(i<n) { if(j==-1||s1[i]==s2[j]) { i++; j++; } else { j=next[j]; } if(j==m) { return i-m+1; } } return -1;}int main(){ int k; cin>>k; while(k--) { cin>>n>>m; for(int i=0;i<n;i++) { //cin>>s1[i]; scanf("%d",&s1[i]); } for(int i=0;i<m;i++) { //cin>>s2[i]; scanf("%d",&s2[i]); } getnext(); if(n<m) cout<<"-1"<<endl; else cout<<kmp()<<endl; } return 0;}
- hdu—1005 Number Sequence
- HDU 1005 — Number Sequence
- HDU——1711 Number Sequence
- HDU—— 1711 Number Sequence
- hdu 1711——Number Sequence
- HDU 1711 Number Sequence——kmp
- HDU 1711 — Number Sequence简单题
- HDU——5014 Number Sequence
- hdu 5014——Number Sequence
- HDU—— 1005 Number Sequence
- hdu 1005——Number Sequence
- hdu(1171)——Number Sequence
- HDU 1005 —— Number Sequence
- hdu——1711——Number Sequence
- HDU 1711—— Number Sequence(KMP 入门)
- hdu——1711Number Sequence(kmp专练)
- 1005—Number Sequence
- HDU——1005——Number Sequence
- Hibernate懒加载深入分析
- 关于考研的一些复习视屏
- Maya: 菜单 编辑网格 >指定不可见面
- remoting与socket、webservice和wcf的比较及优势
- 设计模式学习笔记
- hdu——1711——Number Sequence
- 禁止Windows7系统自动安装驱动程序
- HDU:3953 I'll play a trick on you
- 给定日期求对应的星期 (日期从1900.1.1 星期一开始)
- VC++ 坐标问题总结,控件大小随窗口变化
- hdu 2844 Coins(多重背包优化)
- Maya: 菜单 细分曲面 >纹理>平面映射
- vector表示十字链表+Tarjan+缩点+拓扑排序 详解 poj 2762
- hdu 4681 String 多校第八场