Cod sursa(job #1561843)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 4 ianuarie 2016 16:54:14
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.58 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, 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()
{
    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;
}