Cod sursa(job #922625)

Utilizator tudy23Coder Coder tudy23 Data 22 martie 2013 15:53:38
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#include <cstring>
using namespace std;
const int N=1000100;
char S[N];
int pi[N];
int dim;
void prefix()
{
    int k=0;
    pi[0]=0;
    for(int i=2;S[i]!='\0';++i)
    {
        while(k&&S[k+1]!=S[i])
            k=pi[k];
        if(S[k+1]==S[i])
            ++k;
        pi[i]=k;
    }
}
void citire()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    int n;
    scanf("%d\n",&n);
    for(;n>0;--n)
    {
        gets(S+1);
        prefix();
        dim=strlen(S+1);
        bool ok=1;
        for(int i=dim;i>=0;--i)
            if(pi[i]&&i%(i-pi[i])==0){
                printf("%d\n",i);
                ok=0;
                break;
            }
        if(ok)
            printf("0\n");
    }
    fclose(stdin);
    fclose(stdout);
}
int main()
{
    citire();
    return 0;
}