POJ 1961 Period

求一个字符串在第几位上出现了循环节,输出位数 以及循环节的大小

#include 
#include 
#include 
#include 
#include 

using namespace std;

int main()
{
    char s[1000100];
    int t;
    int Case = 1;
    while(~scanf("%d", &t)){
        if(t == 0) break;
        scanf("%s", s);
        int next[t+1];
        int i = 0,j = -1;
        next[0] = -1;
        while(i < t){
            if(j == -1||s[i]==s[j]){
                i++;
                j++;
                next[i] = j;
            }else{
                j=next[j];
            }
        }
        printf("Test case #%d\n", Case);
        for(i = 2;i<=t;i++){
            if(i%(i-next[i])==0&&i/(i-next[i])>1){
                printf("%d %d\n", i, i/(i-next[i]));
            }
        }
        cout <


你可能感兴趣的:(POJ,kmp算法)