poj-2406 Power Strings睡前一水~

http://poj.org/problem?id=2406

睡前一水~ 一看就覺得是KMP的next數組...

然後果然是

#include <cstdio>
#include <cstring>
#include <iostream>
#define max 1000010
int n[max];
char str1[max];
int next(char s[])
{
    n[0]=-1;
    int j=0,k=-1;
    int len=strlen(s);
    while(j<len)
    {
        if(k==-1||s[j]==s[k])
            n[++j]=++k;
        else k=n[k];
    }
    j=len-k;
    if(len%j==0)
        return len/j;
    else
        return 1;
}
int main()
{
    while(~scanf("%s",&str1))
    {
        if(str1[0]=='.')
            break;
        printf("%d\n", next(str1));
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章