Cod sursa(job #163290)

Utilizator blasterzMircea Dima blasterz Data 21 martie 2008 21:45:00
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include <string>
#define maxn 1000002

char a[maxn];
int t[maxn];
int n;

void solve()
{
    memset(t, 0,sizeof(t));
    int i, k=0;
    t[1]=0;
    for(i=2;i<=n;++i)
    {
	while(k>0 && a[k+1]!=a[i]) k=t[k];
	if(a[k+1]==a[i]) ++k;
	t[i]=k;
    }

   int sol=0;
  for(i=1;i<=n;++i)
     if(t[i]>0 && (i%(i-t[i]))==0) sol=i; 

  printf("%d\n", sol);
  //  for(i=1;i<=n;++i)printf("%d ",t[i]);
  // printf("\n"); 


}

int main()
{
  int T,i;
  freopen("prefix.in","r",stdin);
  freopen("prefix.out","w",stdout);
  scanf("%d\n", &T);
  while(T--)
  {
      memset(a, 0,sizeof(a));
      scanf("%s\n", &a);
    //  printf("%s\n", a);
      n=0;
      while(a[n]>='a' && a[n]<='z') ++n;
      for(i=n;i;--i) a[i]=a[i-1];
      solve();
  }
  return 0;
}