Cod sursa(job #1561830)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 4 ianuarie 2016 16:38:11
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 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 = 0, st = 0, maxi = 0;
	pi[1] = 0;
	for (int i = 2; i <= n; i++) {
        while (s[i] != s[k+1] && k)
			k = pi[k];
		if (s[i] == s[k+1])
            k++;
		pi[i] = k;
		if (k<<1 >= i) {
			int fraze = i-k;
            if (k % fraze == 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);
		for (int i = strlen(s); i; --i)
			s[i] = s[i-1];
		solve();
	}
    return 0;
}