码迷,mamicode.com
首页 > 其他好文 > 详细

Period(POJ 1961)

时间:2018-11-08 00:23:58      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:const   解释   sam   names   ons   通过   字符串   period   space   

测评传送门

题意:

一个字符串,求所有循环节长度及位置

Sample Input

3
aaa
12
aabaabaabaab
0

Sample Output

Test case #1
2 2
3 3

Test case #2
2 2
6 2
9 3
12 4

通过样例1再解释下题意:

aa可由第1个a循环 2 次得到,输出位置:2,循环长度:2

aaa可由第1个a循环 3 次得到,输出位置:3,长度:3

做法:KMP的 next 预处理

code

#include<stdio.h> 
#include<string.h> 
using namespace std;
const int mxn=1e6+10;
int n,cnt,next[mxn];
char str[mxn];

void Sol() {
    int j=0;
    for(int i=2;i<=n;++i) {
        while(j>0 && str[i]!=str[j+1]) j=next[j]; 
        if(str[i]==str[j+1]) ++j;
        next[i]=j;
    }
}

int main() 
{
    while(scanf("%d",&n) && n) 
    {
        scanf("%s",str+1);
        Sol();
        printf("Test case #%d\n",++cnt);
        for(int i=2;i<=n;++i) {
            int len=i-next[i];
            if(i!=len && i%len==0) {
                printf("%d %d\n",i,i/len);
            }
        }
        puts("");
    }
    return 0;
}
/*
12
aabaabaabaab
3
aaa
0
*/

 

Period(POJ 1961)

标签:const   解释   sam   names   ons   通过   字符串   period   space   

原文地址:https://www.cnblogs.com/qseer/p/9926333.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!