Cod sursa(job #1342376)

Utilizator LycrsTrifan Tamara Lycrs Data 13 februarie 2015 21:57:17
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("prefix.in");
ofstream cout("prefix.out");
 
int n, i, m, j, prefix[2000005], a, k, r, f=0, c[1005];
char s[20000005], p[2000005];
 
void MakePrefix()
{
    a=0;
    prefix[1]=0;
    for(j=2; j<=m; ++j)
    {
    	a=prefix[j-1];
        while(a && p[a+1]!=p[j]) a=prefix[a];
 
        if (p[a+1]==p[j]) ++a;
 
        prefix[j]=a;
    }
}
 
 
int main()
{
	
	int t;
	cin>>t;
	
	while (t--)
	{
		r=0;
		cin>>(p+1);
		m=strlen(p+1);
		for (j=1; j<=m+3; ++j) prefix[j]=0;
		
		MakePrefix();
				
		for (int i=m; i>0; --i)
		{ 
			if (prefix[i]>0 && i%(i-prefix[i])==0) 
			{
				r=i; 
				i=0;
			}
				
		}
		
		cout<<r<<'\n';
	}
    cin>>(p+1);
   

    return 0;
}