Cod sursa(job #564228)

Utilizator bogfodorBogdan Fodor bogfodor Data 26 martie 2011 22:27:48
Problema Prefix Scor 100
Compilator cpp Status done
Runda gr_3 Marime 0.75 kb
#include <cstdio>
#include <cstring>

using namespace std;

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

int t;
char s[1000005];
int ap[1000005];

void kmp()
{
    int l=strlen(s+1);
    int v=0;
    ap[1]=0;
    for(int i=2;i<=l;i++)
    {
        while(v>0 && s[v+1]!=s[i])
            v=ap[v];
        if(s[v+1] == s[i])
            v++;
        ap[i]=v;
    }
}

void afisare()
{
    int q=0;
    int l=strlen(s+1);
    for(int i=2;i<=l;i++)
    {
        if(i%(i-ap[i])==0 && ap[i]>0)
            q=i;
    }
    printf("%d\n",q);
}

int main()
{
    scanf("%d\n", &t);
    for(int i=0;i<t;i++)
    {
        gets(s+1);
        kmp();
        afisare();
    }
    return 0;
}