Cod sursa(job #1255201)

Utilizator BLz0rDospra Cristian BLz0r Data 4 noiembrie 2014 15:17:26
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <cstdio>
#include <cstring>
using namespace std;

FILE *f=fopen ("prefix.in", "r");
FILE *g=fopen ("prefix.out", "w");

int pi[1000005];
char s[1000005];

void prefix (int lg){
	int k=0;
	pi[1]=0;

    for(int i=2;i<=lg;++i){
		while (k>0 && s[i]!=s[k+1]) k=pi[k];
		if(s[i]==s[k+1]) k++;
		pi[i]=k;
	}
}

int main(){
	int T,lg;
    
	fscanf(f,"%d%*c",&T);
   
	for (;T;--T){
        fscanf (f,"%s%*c",s+1);
        lg=strlen(s+1);
		bool ok=0;
		
		prefix (lg);
		
        for(int i=lg;i>=1;--i){
            if (pi[i]!=0 && i%(i-pi[i])==0 ){
                fprintf(g,"%d\n",i);
				ok=1;
                break;
            }
		}
        if(!ok) fprintf(g,"0\n");
    }
    return 0;
}