Cod sursa(job #1325688)

Utilizator anarogozAna Rogoz anarogoz Data 24 ianuarie 2015 11:38:53
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<cstdio>
#include<string.h>
using namespace std;
const int NMAX = 1000005;
char s[NMAX];
int p[NMAX], m;
void prefix()
{
    int k = 0;
    p[1] = p[0] = 0;
    for(int i = 2; i <= m; i++)
    {
        while(k > 0 && s[i] != s[k + 1])
                k = p[k];

        if(s[i] == s[k + 1])
            k++;
        p[i] = k;
    }
}
int main()
{
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);
    int n, i, j;
    scanf("%d\n", &n);
    for(i = 1; i <= n; i++)
    {
        gets(s + 1);
        m = strlen(s + 1);
        prefix();
        for(j = m; j >= 1; j--)
            if(p[j] > 0 && j % (j - p[j]) == 0)
            {
                printf("%d \n", j);
                break;
            }
        if(j == 0)
            printf("0\n");
        memset(p, 0, sizeof(p));
        scanf("\n");
    }

    return 0;
}