HDU 2203 — 亲和串

来源:互联网 发布:mac版cad2014破解文件 编辑:程序博客网 时间:2024/04/28 03:41

原题:http://acm.hdu.edu.cn/showproblem.php?pid=2203

思路:

将T串扩增成TT串,就相当于循环移位了一周;




#include<stdio.h>#include<string.h>const int maxn = 100005;char T[maxn*2], P[maxn];int f[maxn], n, m;bool find(){    int j = 0;    for(int i = 0;i<n*2;i++)    {        while(j && T[i]!=P[j]) j = f[j];        if(T[i] == P[j]) j++;        if(j == m) return true;    }    return false;}void getFail(){    f[0] = f[1] = 0;    for(int i = 1;i<m;i++)    {        int j = f[i];        while(j && P[i]!=P[j]) j=f[j];        if(P[i] == P[j])        f[i+1] = j+1;        else        f[i+1] = 0;    }}int main(){    while(scanf("%s%s", T, P)!=EOF)    {    n = strlen(T);    m = strlen(P);if(n<m){printf("no\n");continue;}for(int i = n;i<n*2;i++)T[i] = T[i-n];T[2*n] = 0;        getFail();        if(find())        printf("yes\n");        else        printf("no\n");    }    return 0;}


0 0
原创粉丝点击