标签:
1 #include <vector> 2 #include <map> 3 #include <set> 4 #include <algorithm> 5 #include <iostream> 6 #include <cstdio> 7 #include <cmath> 8 #include <cstdlib> 9 #include <string> 10 #include <cstring> 11 #include <queue> 12 using namespace std; 13 #define INF 0x3f3f3f3f 14 15 char p[100010],s[100010]; 16 int nex[100010]; 17 int lens; 18 19 void get(char *p) 20 { 21 int plen=strlen(p); 22 nex[0]=-1; 23 int k=-1,j=0; 24 while(j < plen){ 25 if(k==-1 || p[j] == p[k]){ 26 ++j; 27 ++k; 28 if(p[j] != p[k]) 29 nex[j]=k; 30 else 31 nex[j]=nex[k]; 32 } 33 else{ 34 k=nex[k]; 35 } 36 } 37 } 38 39 int kmp(int lens,char *p) 40 { 41 int i=0,j=0; 42 int slen=lens; 43 int plen=strlen(p); 44 while(i < slen && j< plen){ 45 if(j==-1 || s[i]==p[j]){ 46 ++i; 47 ++j; 48 } 49 else{ 50 j=nex[j]; 51 } 52 } 53 if(j == plen) 54 return i-j; 55 else 56 return -1; 57 } 58 59 int main() 60 { 61 while(~scanf("%s%s",s,p)){ 62 lens=strlen(s); 63 for(int i=lens; i<2*lens; i++){ 64 s[i]=s[i-lens]; 65 } 66 get(p); 67 lens+=lens; 68 if(kmp(lens,p)!=-1) 69 puts("yes"); 70 else 71 puts("no"); 72 } 73 }
标签:
原文地址:http://www.cnblogs.com/wangmengmeng/p/5487313.html