[HDU 3746]Cyclic Nacklace[kmp求周期]

2014-11-23 22:19:40 ? 作者: ? 浏览: 4
题意:
求从末端补足至少两周期的最小项数.
思路:
kmp求循环周期应用
#include   
#include   
const int MAXN = 100005;  
int next[MAXN];  
char s[MAXN];  
//125MS   688K  
void prekmp()  
{  
    next[0] = -1;  
    int j = -1;  
    for(int i=1;s[i];i++)  
    {  
        while(j!=-1 && s[j+1]!=s[i])    j = next[j];  
        if(s[j+1]==s[i])    j++;  
        next[i] = j;  
    }  
}  
  
int main()  
{  
    int T;  
    scanf("%d",&T);  
    while(T--)  
    {  
        scanf("%s",s);  
        prekmp();  
        int n,len,r,q,add;  
        n = strlen(s);  
        len = n - 1 - next[n-1];  
        r = n % len;  
        q = n / len;  
        if(q==1)  
        {  
            add = 2*len - n;  
        }  
        else  
        {  
            add = (len - r)%len;  
        }  
        printf("%d\n",add);  
    }  
  
}  


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: