自用模板一
//KMP模板
#include<bits/stdc++.h>
using namespace std;
void get_next(string t, int* next){
int i=0;
int j=-1;
next[0]=-1;
while(i<t.length()){
if(j==-1||t[i]==t[j]){
i++,j++;
next[i]=j;
}
else{
j=next[j];
}
}
}
int kmp(string s, string t){
int next[t.length()+5];
get_next(t, next);
int i=0;
int j=0;
while(i<s.length()&&j<t.length()){
if(j==0||s[i]==t[j]){
i++,j++;
}
else{
j=next[j];
}
}
if(i==s.length()){
return -1;
}
if(j==t.length()){
return i-t.length()+1;
}
}
int main(