hdu1711 Number Sequence 求模式串在主串中的位置
来源:互联网 发布:华为办公网络 编辑:程序博客网 时间:2024/06/14 04:40
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>#include<cstring>#include<cstdio>#include<string>using namespace std;int s[1000010],t[10010];//s为主串,t为模式串int nextx[10010];//从1开始int slen,tlen;void get_next()////得到模式串str1的next[];{ int i=0,j=-1; nextx[0]=-1; while(i<tlen) { if(j==-1||t[i]==t[j]) nextx[++i]=++j; else j=nextx[j]; }}int kmp_index()////返回首次出现的位置,从0开始{ int j=0; for(int i=0;i<slen;i++) { while(j!=-1&&s[i]!=t[j]) j=nextx[j]; j++; if(j==tlen) return i-tlen+2; } return -1;}int main(){ int T; cin>>T; while(T--) { cin>>slen>>tlen; for(int i=0;i<slen;i++) scanf("%d",&s[i]); for(int i=0;i<tlen;i++) scanf("%d",&t[i]); get_next(); cout<<kmp_index()<<endl; } return 0;}
0 0
- hdu1711 Number Sequence 求模式串在主串中的位置
- hdu1711——Number Sequence(KMP求位置)
- hdu 1711 Number Sequence(求模式串首次出现在文本串的位置)
- hdu1711-Number Sequence-kmp基础 模式匹配
- hdu1711 Number Sequence
- hdu1711 Number Sequence
- hdu1711 Number Sequence
- HDU1711:Number Sequence
- Number Sequence hdu1711 KMP
- hdu1711-Number Sequence
- hdu1711 Number Sequence
- hdu1711 Number Sequence,KMP
- hdu1711 Number Sequence (KMP)
- hdu1711 Number Sequence---KMP
- hdu1711 Number Sequence
- HDU1711 Number Sequence
- HDU1711 Number Sequence
- hdu1711 Number Sequence
- 百度echarts 的使用
- Building Android Kernel for the Nexus 5 — AOSP(6.0.1)
- 淘宝notify-消息中间件(2)
- 最短路径算法
- Pixhawk 四旋翼状态估计
- hdu1711 Number Sequence 求模式串在主串中的位置
- servlet 生命周期 和 作原理详解
- UE4 引擎 package 可执行文件过程中碰到fatal error的常见解决方法
- .gitignore & git rm 从仓库中删去某个文件
- org.apache.jasper.JasperException
- 阿里云服务器配置VPN详解
- Mybatis的<where><foreach><set>等标签详解
- MetaQ
- jquery.lazyload(图片延迟加载)的使用