Cod sursa(job #1345574)

Utilizator ade_tomiEnache Adelina ade_tomi Data 17 februarie 2015 18:54:02
Problema PScPld Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb

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

    freopen("pscpld.in","r",stdin);
    freopen("pscpld.out","w",stdout);
    s[0]='#';
    gets(sir);
    m=strlen(sir);
   for(i=0;i<m;i++)
    {
        if(sir[i]>='a'&&sir[i]<='z'){
            nr++;
            s[nr]=sir[i];
                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;
}