Cod sursa(job #1203910)

Utilizator pentrusandaPentru Sanda pentrusanda Data 1 iulie 2014 15:31:37
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;

int t,z[1000005];

char s[1000005];

int main()
{
    ifstream in ("prefix.in");
    ofstream out ("prefix.out");

    in>>t;
    for (;t>0;--t)
    {
        in>>s;
        int n=strlen(s),st=0,dr=0,maxim=0;
        for (int i=1;i<n;++i)
        {
            if (i<=dr)
            {
                z[i]=dr-i+1;
                if (z[i]>z[i-st]) z[i]=z[i-st];
            }
            while (i+z[i]<n && s[z[i]]==s[i+z[i]]) ++z[i];
            if (dr<i+z[i]-1) dr=i+z[i]-1,st=i;
            if (z[i]>z[maxim] && z[i]>=i) maxim=i;
        }
        int j=maxim;
        if (maxim>0) while (z[j]>=maxim) j=j+maxim;
        out<<j<<"\n";
        for (int i=0;i<n;++i) z[i]=0;
    }

    in.close();
    out.close();
    return 0;
}