Cod sursa(job #984960)

Utilizator andrettiAndretti Naiden andretti Data 15 august 2013 22:59:09
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<stdio.h>
#include<cstring>
#define maxn 1000005
using namespace std;

int t,n;
int p[maxn];
char s[maxn];

int get_per()
{
    int k=0;
    p[1]=0;
    for(int i=2;i<=n;i++)
    {
        while(s[k+1]!=s[i] && k>0) k=p[k];
        if(s[k+1]==s[i]) k++;
        p[i]=k;
    }

    for(int i=n;i>=2;i--)
      if(p[i] && i%(i-p[i])==0)
       return i;
    return 0;
}

void read()
{
    scanf("%d\n",&t);
    for(int i=1;i<=t;i++)
    {
        scanf("%s\n",s+1);
        n=strlen(s+1);
        memset(p,0,sizeof(p));
        printf("%d\n",get_per());
    }
}

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

    read();

    fclose(stdin);
    fclose(stdout);
    return 0;
}