Cod sursa(job #1516970)

Utilizator zertixMaradin Octavian zertix Data 3 noiembrie 2015 19:09:22
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <cstdio>
#define milion 1000100
#include <cstring>
using namespace std;

int pref_max[milion],t,lun,maxl;
char sir[milion];

int rezolv()
{
    pref_max[0]=0;
    lun=strlen(sir);
    int i=0,j=1;
    maxl=0;
    while (j<lun)
    {
        pref_max[j]=0;
        if (sir[i]!=sir[j])
            if (i==0)
                ++j;
            else
                i=pref_max[i-1];

        else if (sir[i]== sir[j])
        {
            pref_max[j]=i+1;
            ++i;
            ++j;
        }
    }
    for(int m=lun-1; m>0; --m)
        if ( pref_max[m] && m+1-pref_max[m] && ((m+1)%(m+1-pref_max[m]))==0)
            return m+1;
    return 0;
}

int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d",&t);
    for (int l=1;l<=t;++l)
        {
            scanf("%s",sir);
            printf("%d\n" ,rezolv());

        }
    return 0;
}