Cod sursa(job #1419807)

Utilizator heracleRadu Muntean heracle Data 16 aprilie 2015 16:33:28
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>

FILE* in=fopen("numarare.in","r");
FILE* out=fopen("numarare.out","w");

const int Q=200007;

int v[Q];

int n;

int p[Q];

int main()
{
    fscanf(in,"%d",&n);

    n=n*2-1;

    for(int i=1; i<=n; i+=2)
        fscanf(in,"%d",&v[i]);

    int dr=0,ce=0;

    int rez=0,act;

    for(int i=2; i<=n; i+=2)
    {
        if(i>dr)
        {
            ce=i;
            dr=i;
        }
        else
        {
            p[i]=p[2*ce-i];

            if(p[i]>dr-i)
                p[i]=dr-i;
        }

        if(p[i]==0)
        {
            p[i]=1;
        }
        act=v[i-1]+v[i+1];

        while(i-p[i]-2>0 && i+p[i]+2<=n &&  v[i-p[i]-2]+v[i+p[i]+2]==act)
            p[i]+=2;

        if(i+p[i]>dr)
        {
            dr=i+p[i];
            ce=i;
        }
        rez+=(p[i]+1)/2;
    }

    fprintf(out,"%d\n",rez);

    return 0;
}