#include <bits/stdc++.h>
using namespace std;
int t, n, m;
int a1[1000010], b1[10010], f[10010];
bool flag;
inline int gt(){
char _ch;
bool _ok = 0;
int _num = 0, _op = 1;
while(1){
_ch = getchar();
if(_ch == '-') _op *= -1;
else if(_ch >= '0' && _ch <= '9'){
_num = _num*10 + _ch - '0';
_ok = 1;
}else if(_ok) return _op * _num;
}
}
int main(){
t = gt();
while(t --){
flag = 0;
n = gt(), m = gt();
for(int i = 1; i <= m; i ++) f[i] = 0;
for(int i = 1; i <= n; i ++) a1[i] = gt();
for(int i = 1; i <= m; i ++) b1[i] = gt();
int p = 0;
for(int i = 2; i <= m; i ++){
while(p > 0 && b1[p+1] != b1[i]) p = f[p];
if(b1[p+1] == b1[i]) p ++;
f[i] = p;
}
p = 0;
for(int i = 1; i <= n; i ++){
while(p > 0 && b1[p+1] != a1[i]) p = f[p];
if(b1[p+1] == a1[i]) p ++;
if(p == m){
printf("%d\n", i-m+1);
flag = 1;
break;
}
}
if(!flag) printf("-1\n");
}
return 0;
}
【hdu 1711】 Number Sequence KMP模板
最新推荐文章于 2021-03-01 20:47:37 发布