Cod sursa(job #960)

Utilizator sims_glAlexandru Simion sims_gl Data 12 decembrie 2006 12:18:31
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#include <string.h>

#define nm 1000100
#define pm 1000

int t, n, p[nm], a[nm], sol;
char s[nm];

int main()
{
	int i, j, k;
    char c;

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

	scanf("%d ", &t);
    for (i = 1; i <= t; ++i)
    {
    	scanf(" %s ", &s);
        n = strlen(s);
        for (j = n; j > 0; --j)
        	s[j] = s[j - 1];

        p[1] = 0;
        for (k = 0, j = 2; j <= n; ++j)
        {
        	while(k && s[k + 1] != s[j])
            	k = p[k];
            if (s[k + 1] == s[j])
            	++k;
            p[j] = k;
		}

		sol = 0;
		for (j = 1; j <= n; ++j)
			if ((j - p[j] == p[j]) || (j - p[j] == p[j] - p[p[j]] && a[p[j]]))
			{
				a[j] = 1;
				sol = j;
			}
            else
            	a[j] = 0;

        printf("%d\n", sol);
	}

	return 0;
}