Period HDU - 1358

循环节问题

其实和上一题差不多。
关键都是如何判断循环节罢了

我们求出next数组后,取遍历索引
求出当前数组的循环节i-next[i]
然后如果cyc==i就没有循环节
如果i%cyc!=0就不是完整循环节

然后输出就好了

#include<iostream>
#include<algorithm>
using namespace std;
const int max_n = 1e6+100;
int n;
int net[max_n];
char p[max_n];

void getnext(){
    net[0]=-1;net[n]=500;
    for (int i=0,j=-1;i<n;){
        if (j==-1||p[i]==p[j])net[++i]=++j;
        else j=net[j];
    }
}


int main(){
    int tcase = 0;
    while(scanf("%d",&n)&&n){
        printf("Test case #%d\n",++tcase);
        scanf("%s",p);
        getnext();
        for (int i=1;i<=n;++i){
            int cyc = i-net[i];
            if (cyc==i)continue;
            else if (i%cyc==0)printf("%d %d\n",i,i/cyc);
        }puts("");
    }
}
Kuangbin题单详解(kmpManacher) 文章被收录于专栏

刷Kuangbin题

全部评论

相关推荐

10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务