Cod sursa(job #1561841)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 4 ianuarie 2016 16:50:15
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.59 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXN 1000050

using namespace std;

char s[MAXN];
int pi[MAXN], n, t;

void solve()
{
	int k, maxi;
	pi[1] = k = maxi = 0;
	for (int i = 2; i <= n; ++i) {
        while (s[i-1] != s[k] && k)
			k = pi[k];
		if (s[i-1] == s[k])
            k++;
		pi[i] = k;
		if (k<<1 >= i && k%(i-k) == 0)
			maxi = i;
	}
	printf("%d\n", maxi);
}

int main()
{
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);

    scanf("%d\n", &t);
    for (int i = 1; i <= t; ++i)
	{
		gets(s);
		n = strlen(s);
		solve();
	}
    return 0;
}