Cod sursa(job #1457778)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 4 iulie 2015 14:19:32
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#include <string.h>
using namespace std;

const int Dim = 1000001;

int T,P[Dim];
char S[Dim];

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

    scanf("%d ",&T);

    while(T--)
    {
        gets(S + 1);

        int N = strlen(S + 1),it = 0,Sol = 0;

        for (int i = 2;i <= N;i++)
        {
            while(it && S[it + 1] != S[i])
                it = P[it - 1];

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

            P[i] = it;
        }
        for (int i = N;i > 1;i--)
         if (P[i] && (i % (i - P[i])) == 0)
         {
                Sol = i;
                break;
         }

        printf("%d\n",Sol);
    }
  return 0;
}