Cod sursa(job #468080)

Utilizator irene_mFMI Irina Iancu irene_m Data 2 iulie 2010 10:16:47
Problema Numarare Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#define infile "numarare.in"
#define outfile "numarare.out"
#define MaxN 100024

int a[MaxN], sol[MaxN];
int N;

void read()
{
      int i;
      scanf("%d",&N);
      for(i=1;i<=N;i++)
      {
            scanf("%d",&a[i]);
            sol[i]=1;
      }
}

int maxim(int a,int b)
{
      if(a>b)
            return a;
      return b;
}

void solve()
{
      int i,l,s;
      sol[1]=1; sol[N]=0;

      for(i=2;i<N;i++)
      {
            l=sol[i]; s=a[i]+a[i+1];

            while(i-l>=0 && i+l<=N && a[i-l+1]+a[i+l]==s)
            {
                  if(l%2==0)
                        sol[i+l/2]=maxim(l/2,sol[i+l/2]);
                  l++;
            }

            sol[i]=l-1;
      }
}

void write()
{
      int i;
      for(i=1;i<N;i++)
            sol[N]+=sol[i];

      printf("%d\n",sol[i]);
}

int main()
{
      freopen(infile,"r",stdin);
      freopen(outfile,"w",stdout);

      read();
      solve();
      write();

      fclose(stdin);
      fclose(stdout);
      return 0;
}