Cod sursa(job #1738291)

Utilizator metrix007Lungu Ioan Adrian metrix007 Data 6 august 2016 13:30:46
Problema Numarare Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <fstream>
#define INF 100008
#define NMAX 100000
using namespace std;

int a[2*NMAX+3],n,c,m;
long long p[2*NMAX+3],r,ct;

ifstream in("numarare.in");
ofstream out("numarare.out");

int main()
{
    in >> n;
    for(int i=1;i<=2*n+1;i++)
    {
        if(i%2==1) continue;
        in >> a[i];
    }
    a[0] = -7*INF;
    a[2*n+2] = 7*INF;
    n = 2*n+2;

    c = 1;
    r = 1;
    a[1] = 0;
    for(int i=3;i<n-1;i+=2)
    {
        m = 2*c-i;
        if(i<r) p[i] = min(r-i,p[m]);
        else p[i] = 1;


        a[i] = a[i-1]+a[i+1];

        while(a[i+p[i]+2]+a[i-p[i]-2]==a[i])
        {
            p[i]+=1;
        }

        if(i+p[i]>r)
        {
            c = i;
            r = p[i]+i;
        }
    }


    for(int i=1;i<n;i++)
    {
    //cout << p[i] << " " ;
      if(p[i]==1) ct+=p[i];
      else if(p[i]>=2) ct+=2;
    }
    out <<ct;
    return 0;
}