Cod sursa(job #1345569)

Utilizator ade_tomiEnache Adelina ade_tomi Data 17 februarie 2015 18:50:45
Problema PScPld Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb

#include<stdio.h>
int i,j,p[1000005*2],n,nr;
char s[1000004],c;
long long sol;
int main()
{

    freopen("pscpld.in","r",stdin);
    freopen("pscpld.out","w",stdout);
    s[0]='#';
    while(scanf("%c",&c)!=EOF)
    {
        if(c>='a'&&c<='z'){
            nr++;
            s[nr]=c;
                nr++;
        s[nr]='#';
        }
    }
    n=nr;
    for(i=1;i<n;i++)
    {

        if(j+p[j]<i)
        {
            while(s[i+p[i]+1]==s[i-p[i]-1]&&p[i]<i)
                p[i]++;
        }
        else
        {
            if(i+p[2*j-i]<j+p[j])
            {
                p[i]=p[2*j-i];

            }
            else
            {

                p[i]=p[j]-i+j;
                while(s[i+p[i]+1]==s[i-p[i]-1]&&p[i]<i)
                    p[i]++;

            }

        }
        if(i+p[i]>j+p[j])
            j=i;
        sol+=(p[i]+1)/2;

    }
    printf("%lld",sol);
    return 0;
}