Cod sursa(job #1287619)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 7 decembrie 2014 21:36:13
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream>
#include<cstring>
using namespace std;

const int NMAX=1000005;

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

inline int FindPrefix(int n)
{
    int i;
    for (i=n;i>=2;i--)
        if (dp[i]>=(i>>1) && i%(i-dp[i])==0) return i;
    return 0;
}

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;
                    }
            fout<<FindPrefix(len)<<"\n";
        }
    return 0;
}