题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711
题意就是求b数组在a数组出现的位置;就是kmp模板;
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> using namespace std; const int N = 1e6+7; int a[N], b[N], Next[N], n, m; void GetNext() { int i=0, j=-1; Next[0] = -1; while(i<n) { if(j==-1 || b[i] == b[j]) Next[++i] = ++j; else j=Next[j]; } } int kmp() { int i=0, j=0; while(i<m) { if(j==-1 || a[i] == b[j]) { i++;j++; } else j=Next[j]; if(j==n)///如果j==n就返回下标; return i-n+1; } return -1; } int main() { int T; scanf("%d", &T); while(T--) { scanf("%d%d", &m, &n); for(int i=0; i<m; i++) scanf("%d", &a[i]); for(int i=0; i<n; i++) scanf("%d", &b[i]); GetNext(); int ans = kmp(); printf("%d\n", ans); } return 0; }
时间: 2024-09-30 19:02:10