Cod sursa(job #1004639)

Utilizator dariusdariusMarian Darius dariusdarius Data 3 octombrie 2013 12:54:39
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<cstdio>
#include<cstring>
using namespace std;
int pi[1000005];
char s[1000005];
int main()
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    int t;
    for(scanf("%d\n",&t);t;t--)
    {
        gets(s+1);int n=strlen(s+1);
        int k=0;pi[1]=0;
        for(int i=2;i<=n;i++)
        {
            while(k>0 && s[k+1]!=s[i])
                k=pi[k];
            if(s[k+1]==s[i]) k++;
            pi[i]=k;
        }
        for(int i=n;i>1;i--)
            if(pi[i] && i%(i-pi[i])==0)
            {
                printf("%d\n",i);
                goto END;
            }
        printf("0\n");
        END:;
    }
    return 0;
}