Cod sursa(job #1309625)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 5 ianuarie 2015 21:34:29
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.55 kb
#include <cstdio>
#include <cstring>

const unsigned MAXN=1000000;

unsigned prefix[MAXN+1];
char s[MAXN+2];



int main(){
	FILE *fin=fopen("prefix.in","r");
	FILE *fout=fopen("prefix.out","w");

	int T; fscanf(fin,"%d",&T);
	while(T--){
		fscanf(fin,"%s",s+1);

		unsigned n=strlen(s+1);

		unsigned l=0;
		prefix[1]=0;
		unsigned k=0;
		for(unsigned i=2;i<=n;++i){
			while(k>0&&s[i]!=s[k+1]) k=prefix[k];

			if(s[k+1]==s[i]) k++;

			prefix[i]=k;
		}

		for(unsigned i=n;i>0;--i) if(prefix[i]&&i%(i-prefix[i])==0) {l=i;break;}

		fprintf(fout,"%d\n",l);
	}
}