Cod sursa(job #671801)

Utilizator GrimpowRadu Andrei Grimpow Data 31 ianuarie 2012 21:48:24
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<iostream>
using namespace std;



// acbabcbabcaxxxxx
int main()
{
    char A[100001];
    int smen[100001],sir,right,i,j,n,poz=0;
   // ifstream f("pscpld.in");
    cin>>A;
    n=strlen(A);
    //impar
    smen[0]=0;
    right=0;
    poz=0;
    for(i=1;i<n;++i)
    {
        if(right>=i)
        {
            if( i+smen[2*poz-i]<=right )
            smen[i]=smen[2*poz-i];
            if(i+smen[i]>right)
            {
                right=i+smen[i];
                poz=i;
            }
            else if(i+smen[2*poz-i]>right)
            {
                smen[i]=right-i;
                for(j=i-smen[i]-1;j>-1 && 2*i - j < n && A[j] == A[2*i-j]; --j)
                    smen[i]=i-j;
                if(i+smen[i]>right)
                {
                    right=i+smen[i];
                    poz=i;
                }
            }
        }
        else
        {
            for(j= i - 1 ; j > -1 && 2 * i - j < n && A[j] == A[2*i-j]; --j)
                sir=i-j;
            smen[i]=sir;
            if( i + sir > right )
            {
                right = i + sir;
                poz=i;
            }
        }
    }
    for(i=0;i<n;i++)
    cout<<smen[i]<<' ';
    return 0;




}