hdu 1711 Number Sequence

来源:互联网 发布:软件项目经理工作内容 编辑:程序博客网 时间:2024/06/05 10:38
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711

 kmp裸题。。。

#include<cstdio>#include<cstdlib>#include<cstring>const int Max_N = 10004;int n, m, next[Max_N], pat[Max_N], text[Max_N * 100];void get_next(int *next, int *P){int i, j;for (i = 1, j = next[0] = 0; i < m; i++){while (j > 0 && P[i] != P[j]) j = next[j - 1];if (P[i] == P[j]) j++;next[i] = j;}}int kmp(int *next, int *P, int *T){int i, j;for (i = j = 0; i < n; i++){while (j > 0 && T[i] != P[j]) j = next[j - 1];if (T[i] == P[j]) j++;if (j == m) return i - m + 2;}return -1;}int main(){#ifdef LOCALfreopen("in.txt", "r", stdin);freopen("out.txt", "w+", stdout);#endifint i, t;scanf("%d", &t);while (t--){scanf("%d %d", &n, &m);for (i = 0; i < n; i++) scanf("%d", &text[i]);for (i = 0; i < m; i++) scanf("%d", &pat[i]);get_next(next, pat);printf("%d\n", kmp(next, pat, text));}return 0;}

0 0