码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 2203

时间:2015-03-10 21:06:55      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

 

开始补坑。

kmp中的fail数组fail[i]是指“当模式串的i位置匹配失败时,应该再用模式串的fail[i]位置匹配“

 

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 #define maxn 100010
 4 
 5 char aa[maxn*2], bb[maxn], cc[maxn];
 6 int f[maxn];
 7 
 8 void getfail( char *P, int *f ) {
 9     int n = strlen(P);
10     f[0] = f[1] = 0;
11     for( int i=1; i<n; i++ ) {
12         int j=f[i];
13         while( j && P[j]!=P[i] ) j=f[j];
14         f[i+1] = P[j]==P[i] ? j+1 : 0;
15     }
16 }
17 bool kmp( char *T, char *P, int *f ) {
18     int n=strlen(T), m=strlen(P);
19     for( int i=0,j=0; i<n; i++ ) {
20         while( j && T[i]!=P[j] ) j=f[j];
21         if( T[i]==P[j] ) j++;
22         if( j==m ) return true;
23     }
24     return false;
25 }
26 
27 int main() {
28     while( scanf("%s%s",cc,bb)==2 ) {
29         aa[0] = 0;
30         strcat(aa,cc);
31         strcat(aa,cc);
32         getfail(bb,f);
33         printf( "%s\n", kmp(aa,bb,f) ? "yes" : "no" );
34     }
35 }
View Code

 

hdu 2203

标签:

原文地址:http://www.cnblogs.com/idy002/p/4326869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!