Cod sursa(job #1207784)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 13 iulie 2014 21:06:47
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
#include<cstdio>
#include<cstring>
using namespace std;

const int NMAX=1000005;

int t,dp[NMAX];
char s[NMAX];

int main()
{
    int i,len,maxim,dr;
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d",&t);
    while (t--)
        {
            scanf("%s",(s+1));
            len=strlen(s+1);
            dp[1]=0;maxim=0;
            for (i=2;i<=len;i++)
                {
                    if (s[dp[i-1]+1]==s[i]) dp[i]=dp[i-1]+1;
                    else
                        {
                            dr=dp[i-1];
                            while (dr && s[dr+1]!=s[i]) dr=dp[dr];
                            dp[i]=0;
                            if (s[dr+1]==s[i]) dp[i]=dr+1;
                        }
                    if (dp[i]>=(i>>1) && i%(i-dp[i])==0) maxim=max(maxim,i);
                }
            printf("%d\n",maxim);
        }
    return 0;
}