您的位置:首页 > 其它

POJ 1961

2015-06-10 16:52 295 查看
#include<iostream>
#include<stdio.h>
#define MAXN 1000001
using namespace std;

char c[MAXN];
int next[MAXN];

void give_next(int len)
{
int i;
int j;
i=0,j=-1;
next[0]=-1;
while(i < len)
{
if(j == -1 || c[i] == c[j])
{
i ++;
j ++;
next[i] = j;
}
else
j = next[j];
}
}

int main()
{
//freopen("acm.acm","r",stdin);
int size;
int tem;
int tem1;
int time = 0;
while(scanf("%d",&size) != EOF,size)
{
cout<<"Test case #"<<++ time<<endl;
scanf("%s",c);
int i;
give_next(size);
for(i = 2; i <= size; ++ i)
{
if(next[i-1] != -1)
{
tem = i - (next[i]);
if(i % tem == 0)
{
tem1 = i/tem;
if(tem1 > 1)
cout<<i<<" "<<tem1<<endl;
}
}
}
cout<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: