POJ1961--Period

题目在这儿。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
char c[1000001];
int n,cnt,nex[1000001];
int main(){
    while(scanf("%d",&n)&&n){
        scanf("%s",c+1);
        nex[1]=0;
         for(int i=2,j=0;i<=n;i++) {
            while(j>0&&c[i]!=c[j+1]){j=nex[j];}
            if(c[i]==c[j+1]){j++;}
            nex[i]=j;
         }
         printf("Test case #%d\n",++cnt);
         for(int i=2;i<=n;i++){
            if(!(i%(i-nex[i]))&&(i/(i-nex[i]))>=2){ 
                printf("%d %d\n",i,i/(i-nex[i]));
            } 
        }
        cout<<endl;
    }
    return 0;
}

切记,一定要注意换行问题。

我就是在这上面错了好几次。

猜你喜欢

转载自www.cnblogs.com/xiongchongwen/p/11135469.html
今日推荐