`
xuela_net
  • 浏览: 494718 次
文章分类
社区版块
存档分类
最新评论

hdu 1358 Period

 
阅读更多

枚举长度判断是否符合周期串,用next判断

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

int next[MAXN];
char s[MAXN],p[MAXN];
void getnext(int n)          
{
    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 cas=1,n;
    while(scanf("%d",&n)&&n)
    {
        scanf("%s",p);
        getnext(n);
        printf("Test case #%d\n",cas++);
        for(int i=2;i<=n;i++)
        {
            if(next[i]&&i%(i-next[i])==0)
            printf("%d %d\n",i,i/(i-next[i]));
        }
        putchar(10);
    }
    return 0;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics