Number Sequence(HDU 1711 KMP)
来源:互联网 发布:淘宝钻级店铺转让 编辑:程序博客网 时间:2024/06/08 03:37
Number Sequence
Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
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
//题意:若b[]是a[]的子串,求b[0]在a[]中的位置。
//思路:KMP算法模板
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <cmath>#include <algorithm>using namespace std;int n, m;int a[1000005], b[10005];int Next[1000005];void GetNext(){Next[0] = 0;Next[1] = 0;for (int i = 1; i < n; i++){int j = Next[i];while (j&&b[i] != b[j]){j = Next[j];}Next[i + 1] = b[i] == b[j] ? j + 1 : 0;}}int kmpSearch(){int i, j = 0;for (int i = 0; i < n; i++){while (j&&a[i] != b[j]){j = Next[j];}if (a[i] == b[j]){j++;}if (j == m)return i - m + 1;}return -1;}int main(){int T;cin >> T;while (T--){scanf("%d%d", &n, &m);for (int i = 0; i < n; i++){scanf("%d", &a[i]);}for (int i = 0; i < m; i++){scanf("%d", &b[i]);}if (m > n){printf("-1\n");continue;}GetNext();int ans = kmpSearch();if (ans == -1){printf("-1\n");}else{printf("%d\n", ans + 1);}}return 0;}
阅读全文
0 0
- HDU 1711:Number Sequence(KMP)
- HDU 1711 Number Sequence(KMP)
- HDU 1711 Number Sequence (KMP算法)
- HDU:1711 Number Sequence(KMP)
- hdu(Number Sequence 1711)kmp
- HDU - 1711 Number Sequence (KMP模板)
- hdu 1711 Number Sequence:(KMP)
- HDU-#1711 Number Sequence(KMP)
- hdu 1711 Number Sequence KMP(水)
- HDU 1711 Number Sequence(kmp)
- HDU-1711 Number Sequence(kmp入门)
- HDU 1711 Number Sequence(KMP)
- HDU 1711 Number Sequence (kmp 已被搞死。)
- HDU 1711 Number Sequence(kmp)
- HDU - 1711 Number Sequence(KMP)
- HDU 1711 Number Sequence (kmp)
- HDU 1711 Number Sequence(kmp模板)
- HDU 1711 Number Sequence(kmp专题)
- localStorage使用总结
- iOS Protobuf和TCP与服务器交互
- 启动一个看不见的app
- float:right 不起 作用的 原因
- Android--使用原生技术实现ListView(原生技术实现网络异步请求,解析json数据)
- Number Sequence(HDU 1711 KMP)
- linux 日志管理、系统启动和备份恢复
- FZU 2282 错排问题dp
- python 网络爬虫报错“UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position”解决方案
- 语义化命名标签规则
- scala函数
- Java程序输出到JSP页面
- [Xamarin]删除Android及iOS控制端堆栈
- Android Studio debugger 灵活使用