hdoj-1711Number Sequence(数组Kmp)
来源:互联网 发布:雕刻机路径编程软件 编辑:程序博客网 时间:2024/05/18 00:32
Number Sequence
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 31863 Accepted Submission(s): 13380
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
题目链接
就是把字符转换成数组比较,kmp的一个应用。
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>using namespace std;const int maxn=1e6+5;int pl,sl;int s[maxn],p[maxn];int next1[maxn];int sum;void next(){ int k=-1,j=0; next1[0]=-1; while(j<pl) { if(k==-1||p[j]==p[k]) { j++; k++; next1[j]=k; } else k=next1[k]; }}int KMP(){ int i=0,j=0; next(); while(j<pl&&i<sl) { if(j==-1||s[i]==p[j]) { i++;j++; } else j=next1[j]; if(j==pl) { sum=i-pl+1;j=next1[j]; break; } } return sum;}int main(){ int t; scanf("%d",&t); while(t--) { sum=-1; scanf("%d%d",&sl,&pl); for(int i=0;i<sl;i++) scanf("%d",&s[i]); for(int i=0;i<pl;i++) scanf("%d",&p[i]); int ans=KMP(); cout<<ans<<endl; } return 0;}
阅读全文
2 0
- hdoj-1711Number Sequence(数组Kmp)
- hdoj 1711 KMP Number Sequence
- HDOJ 1711 Number Sequence (kmp)
- HDOJ--1711--Number Sequence【KMP】
- 【KMP】 HDOJ 1711 Number Sequence
- [HDOJ 1711] Number Sequence [KMP]
- hdoj 1711 Number Sequence 【KMP】
- hdoj 1711 Number Sequence 【kmp】
- hdoj 1711 Number Sequence 【KMP】
- hdoj 1711 Number Sequence【kmp(数字数组)】
- HDOJ 1711:Number Sequence KMP匹配
- HDOJ 1711 Number Sequence(KMP)
- hdoj 1711Number Sequence (简单KMP匹配)
- HDOJ 1711 Number Sequence ——KMP
- HDOJ Number Sequence 1711【KMP裸题】
- HDOJ 1711 Number Sequence(KMP模板题)
- hdoj 1711 Number Sequence 【KMP 入门--晕晕滴】
- (KMP算法)HDOJ-----1711Number Sequence
- 疯狂Spring Cloud连载(24)Zuul路由配置
- HDU 5690-All X
- NSTimer的循环引用问题
- mysql存储过程案例(插入100条数据)
- Django项目
- hdoj-1711Number Sequence(数组Kmp)
- HDU 1312 Red and Black
- 获得当前运行进程的PID,并关闭
- 懒汉式单列
- if(this is life)then{enjoyAllOfIt}
- List源码解析之LinkedList 源码分析
- LintCode-(3)统计数字
- 三、ValueAnimator属性动画的基本使用
- 人脸识别报错cascadedetect.cpp:1698: error: (-215) !empty() in function detectMultiScale