hdu 3746 Cyclic Nacklace

题意:加一个字符串使得原串为周期串,求加的串的最小长度

i%(i-next[i])==0可以表示是否为周期串

next的应用。

#include<cstring>
#include<cstdio>
using namespace std;
#define MAXN 100005

int next[MAXN];
char s[MAXN],p[MAXN];
void getnext(int n)
{
    next[0]=next[1]=0;
    for(int i=1;i<n;i++)
    {
        int j=next[i];
        while(j&&p[i]!=p[j])
        {
            j=next[j];
        }
        if(p[i]==p[j])
        {
            next[i+1]=j+1;
        }
        else
        {
            next[i+1]=0;
        }
    }
}
int main()
{
    int tt;
    scanf("%d",&tt);
    while(tt--)
    {
        int len;
        scanf("%s",&p);
        len=strlen(p);
        getnext(len);
        if(next[len]==0)
        {
            printf("%d\n",len);
            continue;
        }
        int t=len%(len-next[len]);
        if(next[len]==0||t==0)
        {
            printf("0\n");
        }
        else
        printf("%d\n",len-next[len] - next[len] % (len-next[len]));
    }
    return 0;
}


你可能感兴趣的:(hdu 3746 Cyclic Nacklace)