Cod sursa(job #31406)

Utilizator pocaituDavid si Goliat pocaitu Data 15 martie 2007 22:59:33
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include<fstream.h>
#include<stdio.h>
#include<string.h>
#define nmax 1000003


char s[nmax];
long pref[nmax],d;


void prefix()
{long i,k;
 pref[0]=-1;
 pref[1]=0;
 for(i=1;i<=d;i++)
   {k=i-1;
	while(s[i-1]!=s[pref[k]]&&k>0)
	   k=pref[k];
	pref[i]=pref[k]+1;


	}
 }



int main()
{long t,i,j;
 //ifstream f("prefix.in");
 freopen("prefix.in","r",stdin);
 freopen("prefix.out","w",stdout);
 scanf("%ld",&t);
 fgets(s,nmax,stdin);
 for(i=1;i<=t;i++)
  {fgets(s,nmax,stdin);
   s[strlen(s)-1]=NULL;
   d=strlen(s);
   prefix();

   for(j=d;j>0;j--)
	 if(!(j%(j-pref[j]))&&pref[j])
		break;
   printf("%ld\n",j);
   }
 fclose(stdout);

 return 0;
 }