Cod sursa(job #1595685)

Utilizator mirupetPetcan Miruna mirupet Data 10 februarie 2016 14:38:11
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<cstdio>
#include<cstring>
#define DIM 1000003
using namespace std;

FILE *fin = freopen("prefix.in","r",stdin);
FILE *fout = freopen("prefix.out","w",stdout);

int T, N;
int v[DIM];
char S[DIM];

void Solve();

int main()
    {
        scanf("%d\n", &T);

        while (T--)
        {
            gets(S + 1);
            N = strlen(S + 1);

            Solve();
        }
    }

void Solve()
{
    int k = 0;
    v[1] = 0;

    for (int i = 2; i <= N; i++)
    {
        while (k && S[k + 1] != S[i])
            k = v[k];

        if (S[k + 1] == S[i])
            ++k;

        v[i] = k;
    }

    for (int i = N; i; i--)
        if (v[i] && i % (i - v[i]) == 0)
        {
            printf("%d\n", i);
            return;
        }

    printf("0\n");
}