标签:des style io color ar os sp for strong
| Time Limit: 3000MS | Memory Limit: 30000K | |
| Total Submissions: 13584 | Accepted: 6396 |
Description
Input
Output
Sample Input
3 aaa 12 aabaabaabaab 0
Sample Output
Test case #1 2 2 3 3 Test case #2 2 2 6 2 9 3 12 4
题意:求出不同的循环节下循环的长度和循环节个数
根据next数组的性质即 i-next[i] 为一个循环节的长度
#include <iostream>
#include <stdio.h>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 1000009
using namespace std;
int n;
char a[N];
int next[N];
int len;
void getnext()
{
int i,j;
i=0;
j=-1;
next[0]=-1;
while(i<n)
{
if(j==-1||a[i]==a[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
int main()
{
int ca=1;
while(scanf("%d",&n),n)
{
scanf("%s",&a);
getnext();
// for(int i=0;i<=n;i++)
// cout<<next[i]<<" ";
cout<<"Test case #"<<ca++<<endl;
for(int i=1;i<=n;i++)//判断多种循环节的情况
{
len=i-next[i];
if(len!=i&&i%len==0)//遇到循环就输出
cout<<i<<" "<<i/len<<endl;
}
cout<<endl;
}
return 0;
}
标签:des style io color ar os sp for strong
原文地址:http://blog.csdn.net/wust_zjx/article/details/40950823