Cod sursa(job #1430341)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 8 mai 2015 11:14:58
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include <cstring>

using namespace std;

const int nmax = 1000000;

char a[nmax+5];
int pi[nmax+5];
int n;

void prefix()
{
    pi[1] = 0;
    int q = 0;
    for(int i=2; i<=n; i++)
    {
        while(q && a[q+1] != a[i])
            q=pi[q];
        if(a[q+1] == a[i])
            q++;
        pi[i] = q;
    }
}

int main()
{
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);
    int t;
    scanf("%d\n", &t);
    for(int q = 0; q<t; q++)
	{
		scanf("%s\n", a+1);
		n = strlen(a+1);
		prefix();
		bool ok =  false;
		for(int i=n; i>0; i--)
			if(pi[i] && i%(i-pi[i])==0)
			{
				printf("%d\n", i);
				ok = true;
				break;
			}
		if(!ok)printf("0\n");
	}
    return 0;
}