HDU - Number Sequence(KMP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
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
Problem solving report:
Description: 求第二个数组中的数字在第一个数组中出现的位置。
Problem solving: KMP。
Accepted Code:
#include <bits/stdc++.h>
using namespace std;
const int MAXM = 10005;
const int MAXN = 1000005;
int sa[MAXN], sb[MAXM], Next[MAXM];
void Get_Next(int m) {Next[0] = -1;int i = 0, j = -1;while (i < m) {if (~j && sb[i] != sb[j])j = Next[j];else Next[++i] = ++j;}
}
int KMP(int n, int m) {Get_Next(m);int i = 0, j = 0;while (i < n) {if (~j && sa[i] != sb[j])j = Next[j];else i++, j++;if (j >= m)return i - j + 1;}return -1;
}
int main() {int t, n, m;scanf("%d", &t);while (t--) {scanf("%d%d", &n, &m);for (int i = 0; i < n; i++)scanf("%d", sa + i);for (int i = 0; i < m; i++)scanf("%d", sb + i);printf("%d\n", KMP(n, m));}return 0;
}
HDU - Number Sequence(KMP)相关推荐
- HDU 1711 Number Sequence(KMP算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/ ...
- HDU 1711 -Number Sequence(KMP)
题目 Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- Number Sequence (KMP的应用)
个人心得:朴素代码绝对超时,所以要用到KMP算法,特意了解了,还是比较抽象,要多体会 Given two sequences of numbers : a11, a22, ...... , aNN, ...
- HDU_1711 Number Sequence(KMP)
第一道kmp的题目,没想到纠结在上边这么多时间,也不知道哪错了,反正改着改着就对了... #include <iostream>#include <cstdio>using n ...
- 【HDU】1005 Number Sequence (有点可爱)
http://acm.hdu.edu.cn/showproblem.php?pid=1005 A number sequence is defined as follows: f(1) = 1, f( ...
- HDU 1005 Number Sequence
[题目] Number Sequence Time Limit: 2000/1000 MS (Jav ...
- HDU.1005 Number Sequence
原题 HDU.1005 Number Sequence 分类 杂题 题意 给定一个数列{an}\left\{ a_n \right\}{an}的前两项a1a_1a1.a2a_2a2,以及其递推公 ...
- 【HDU - 5014】Number Sequence(贪心构造)
题干: There is a special number sequence which has n+1 integers. For each number in sequence, we have ...
- HDU - 5919 Sequence II——主席树+区间种类++逆序建树
[题目描述] HDU - 5919 Sequence II [题目分析] 题目给定一个数组,每次查询一个区间,找出区间内不同数字的个数x,然后输出按出现顺序第x/2向上取整个数字的位置. 按照要求,我 ...
最新文章
- Windows7在Notepad++中配置Python+OpenCV
- 用Visio进行数据库建模、设计和实现
- 《几何与代数导引》习题1.38
- Spring Boot 2.0(三):Spring Boot 开源软件都有哪些?
- 2021春季每日一题 【week2 未完结】
- 不同虚拟机局域网Vlan之间访问
- 0自动转型到DBNull.Value引发的错误
- [设计模式] Javascript 之 观察者模式
- 平板android优化网络,Android版Firefox更新 针对平板设备优化
- cts测试之host_config.xml
- keras 多GPU训练,单GPU权重保存和预测
- mvn install跳过测试
- net core webAPI NOPI 导出Excel封装
- 村村响农村广播-盐池县农村IP广播案例
- es文件管理复制到fpt服务器,达人教你玩应用:ES文件浏览器之文件互传
- Unity ipad UI适配
- JavaScript几种继承方式
- 紫川歪传------------恶搞暴笑版
- 图片转文字怎么转?这些方法我只告诉你
- 信捷 XDH Ethercat 正负极限的设置