KMP模板
TLE了 输入输出换成标准输入输出AC了...
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
const int N = 1e6+5;
int nxt[N];
int s1[N], s2[N];
void GetNext(int s[], int length)
{
int i=0, j=-1;
nxt[0] = -1;//必须有...
while(i < length){
if(j == -1 || s[i] == s[j]){
i++;
j++;
nxt[i] = j;
}
else j = nxt[j];
}
}
int KMP(int s1[], int n, int s2[], int m)
{
int i = 0, j = 0;
while(i < n){
if(j == -1 || s1[i] == s2[j]){
i++;
j++;
}
else
j = nxt[j];
if(j == m)
return i - j + 1;
}
return -1;
}
int main()
{
int T;
cin >> T;
while(T--){
int n, m;
// cin >> n >> m;
scanf("%d%d", &n, &m);
for(int i=0; i<n; i++){
// cin >> s1[i];
scanf("%d", &s1[i]);
}
for(int i=0; i<m; i++){
// cin >> s2[i];
scanf("%d", &s2[i]);
}
if(n < m){
// cout << -1 << endl;
printf("-1\n");
}
GetNext(s2, m);
// cout << KMP(s1, n, s2, m) << endl;
printf("%d\n", KMP(s1, n, s2, m));
}
return 0;
}