Cod sursa(job #1561860)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 4 ianuarie 2016 17:02:31
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define MAXN 1000050

using namespace std;

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

void solve()
{
	int k, i, 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;
	}
	for (int i = n; i; --i)
		if (pi[i]<<1 >= i && pi[i]%(i-pi[i]) == 0)
			maxi = i, i = 1;
	printf("%d\n", maxi);
}

int main()
{
    ifstream fin("prefix.in");
    freopen("prefix.out", "w", stdout);

	fin >> t;
    for (int i = 1; i <= t; ++i)
	{
		fin >> s;
		n = strlen(s);
		solve();
	}
    return 0;
}