hdu3746—Cyclic Nacklace(kmp周期性质)

来源:互联网 发布:索尼网络签约经销商 编辑:程序博客网 时间:2024/04/26 18:44

传送门:点我

Sample Input
3aaaabcaabcde
Sample Output
025
题意:给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。

#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define N 100005int Next[N];char s[N];void getnext(int n){    Next[0]=0;    int i,j;    for(i=1,j=0; i<n; i++)    {        while(j>0&&s[i]!=s[j])            j=Next[j-1];        if(s[i]==s[j])            j++;        Next[i]=j;    }}int main(){    int t;    cin>>t;    while(t--)    {        scanf("%s",s);        int len=strlen(s);        getnext(len);        int t=len-Next[len-1];//最短循环节        if(len%t==0&&len!=t)//len%t即为循环若干次剩余的字符数,特例len=t            puts("0");        else            printf("%d\n",t-(len%t));//补充为最小循环节的字符数    }    return 0;}