KMP
#include<cstdio> #include<string> #include<iostream> using namespace std; int p[10101010]; char a[10101010]; char b[10101010]; int kmp(char a[],char b[]) { int n=strlen(a+1),m=strlen(b+1); int j=0; for(int i=2;i<=m;i++) { for(;j>0&&b[j+1]!=b[i];j=p[j]); if(b[j+1]==b[i])j++; p[i]=j; } j=0; for(int i=1;i<=n;i++) { for(;j>0&&b[j+1]!=a[i];j=p[j]); if(b[j+1]==a[i])j++; if(j==m)return (i-m+1); } } int main() { scanf("%s%s",a+1,b+1); printf("%d",kmp(a+1,b+1)); return 0; }