Cod sursa(job #1179545)

Utilizator meriniucrMeriniuc Razvan- Dumitru meriniucr Data 28 aprilie 2014 20:50:08
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <fstream>
#include <string>

using namespace std;

ifstream mama("prefix.in");
ofstream tata("prefix.out");

short int T;
int v[1000001];
int n;
string S;

int prefix(int q)
{
    int l,r=0,maxi=0;
    for(int k=1,aux,j;k<=n/2 and r<q;k++)
    {
        l=k; aux=k;
        for(int i=k;i<n and r<q;i++)
        {
            j=0;
            if(k>1)
                {
                    if(S[i]==S[j])
                        {
                            while(j<k and i<n and S[i+1]==S[j+1])
                            {
                                i++;
                                j++;
                                if(S[i]==S[0]) r++;
                            }

                        }

                if(j<k-1) {k=v[++r]-1; i=n;}
                    else {l=l+k; i--;}
                }
                else
            if(k==1)
            {
                while(S[i]==S[j])
                {
                    i++;
                    r++;
                }
                if(i>1)
                    {
                        l=i;
                        k=v[r]-1;
                    }
                    i=n;
            }
        }
        if(l>aux and l>maxi) maxi=l;
    }
    return maxi;
}
int main()
{
    mama>>T;
    for(int i=1,j,k;i<=T;i++)
    {
        mama>>S;
        n=S.size();
        v[0]=0; k=0; j=0;
        while(j<n-1)
            if(S[++j]==S[0]) v[++k]=j;
        tata<<prefix(k)<<'\n';
        }
    return 0;
}