LA-3026

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n,num,Next[1001001];
string s;
int main()
{
    while(cin>>n && n)
    {
        cin>>s;
        memset(Next,0,sizeof(Next));
        cout<<"Test case #"<<++num<<endl;
        int now=0;
        for(int i=2;i <= n;i++)
        {
            while (now && (s[now] != s[i-1])) now=Next[now];
            if(s[now] == s[i-1]) now++;
            Next[i]=now;
        }
        for(int i=2;i <= n;i++)
         if(i%(i-Next[i]) == 0 && Next[i])
          cout<<i<<" "<<i/(i-Next[i])<<endl;
        cout<<endl;
    }
}
while 打成if硬是调了两个小时没发现。。

你可能感兴趣的:(KMP,ACM)