1. 程式人生 > >POJ-2406 Power Strings

POJ-2406 Power Strings

POJ-2406 Power Strings
題解:
其實就是用next把模式串標記出來,然後用如果strlen(模式串)%(strlen(模式串)-next[strlen(模式串)])==0的話,說明這個模式串可以被幾個字串組合而成,而個數等於strlen(模式串)/(strlen(模式串)-next[strlen(模式串)])

程式碼:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int next[1000005];
void Next(char T[])
{
 int i=0,j=-1,l=strlen(T);
 next[0]=-1;
 while(i<l)
 {
  if(j==-1||T[j]==T[i])next[++i]=++j;
  else j=next[j];
 }
}
int main()
{
 char T[1000005];
 while(scanf("%s",&T)!=EOF)
 {
  if(T[0]=='.')break;  
  int l=strlen(T);
  Next(T);
  if(l%(l-next[l])==0)printf("%d\n",l/(l-next[l]));
  else printf("1\n");
 }
 return 0;
}