KMP
1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<cmath>
5 using namespace std;
6 int len,len1,next[100001];
7 char st[10000],st1[10000];
8 bool fid;
9 int main(){
10 fid=false;
11 scanf("%s",st);
12 scanf("%s",st1);
13 memset(next,0,sizeof(next));
14 next[0]=-1;
15 len=strlen(st);
16 len1=strlen(st1);
17 for(int i=1,j=0;i<len;i++){
18 for(j=next[i-1];j!=-1&&st[j+1]!=st[i];j=next[j]);
19 if(st[j+1]==st[i])j++;
20 next[i]=j;
21 }
22 for(int i=0,j=-1;i<len1;i++){
23 for(;j!=-1&&st[j+1]!=st1[i];j=next[j]);
24 if(st[j+1]==st1[i])j++;
25 if(j==len-1){
26 printf("YES
");
27 fid=true;
28 break;
29 }
30 }
31 if(!fid){
32 printf("NO
");
33 }
34 return 0;
35 }