#include <stdio.h>
#include 
<stdlib.h>
#include 
<string.h>

int n;
char str[1000010];
int  next[1000010];

void getnext()
{
    
int i= 0, j= -1; next[0]= -1;
    
    
while( str[i] )
    {
        
if( j== -1 || str[i]== str[j] )
        {
            i
++,j++;
            next[i]
= j;
        }
        
else j= next[j];
    }
}

int main()
{
    
int test= 1;
    
    
while( scanf("%d",&n), n!= 0 )
    {
        getchar(); gets(str);
        
        getnext();
        printf(
"Test case #%d\n", test++ );
        
forint i= 2; i<= n; ++i )
        {
            
int t= i- next[i];
            
            
if( i% t== 0 && i/ t> 1 )
            printf(
"%d %d\n", i, i/ t );
        }
        printf(
"\n");
    }
    
    
return 0;
}
posted on 2009-02-07 18:20 Darren 阅读(364) 评论(2)  编辑 收藏 引用

评论:
# re: Pku 1961 Period 2009-02-09 21:29 | 打酱油
连头文件都用C的了?  回复  更多评论
  
# re: Pku 1961 Period 2009-02-10 11:42 | Darren
@打酱油
呵呵
能不用c++的尽量还是别用
c++用多了也不好  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理