Cod sursa(job #1207779)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 13 iulie 2014 20:59:14
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>
#include<cstring>
using namespace std;

const int NMAX=1000005;

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

int main()
{
    int i,len,maxim,dr;
    ifstream fin("prefix.in");
    ofstream fout("prefix.out");
    fin>>t;
    while (t--)
        {
            fin>>(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/2) && i%(i-dp[i])==0) maxim=max(maxim,i);
                }
            fout<<maxim<<"\n";
        }
    return 0;
}