Cod sursa(job #466768)

Utilizator DraStiKDragos Oprica DraStiK Data 27 iunie 2010 14:33:07
Problema Numarare Scor 40
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 1.31 kb
#include <algorithm>
using namespace std;

#define DIM 100005
#define MAX 10005

unsigned int f[DIM];
unsigned int nrt;
int n,poz=MAX-1;
char buff[MAX];
int v[DIM];

inline void cit (int &nr)
{
    char semn;

    for (semn=1; !('0'<=buff[poz] && buff[poz]<='9'); )
    {
        if (buff[poz]=='-')
            semn=-1;
        if (++poz==MAX)
        {
            fread (buff,1,MAX,stdin);
            poz=0;
        }
    }
    for (nr=0; '0'<=buff[poz] && buff[poz]<='9'; )
    {
        nr=nr*10+buff[poz]-'0';
        if (++poz==MAX)
        {
            fread (buff,1,MAX,stdin);
            poz=0;
        }
    }
    nr*=semn;
}

void read ()
{
    int i;

    cit (n);
    for (i=1; i<=n; ++i)
        cit (v[i]);
}

void solve ()
{
    int cen,i,j,lg;

    for (cen=1; cen<n; ++cen)
    {
        lg=0;
        for (i=cen, j=cen+1; i>=1 && j<=n; --i, ++j)
            if (v[i]+v[j]==v[cen]+v[cen+1])
                lg=j-cen;
            else
                break ;
        ++f[lg];
    }
    for (i=n/2; i>1; --i)
        f[i-1]+=f[i];
    for (i=1; i<=n/2; ++i)
        nrt+=f[i];
    printf ("%u",nrt);
}

int main ()
{
    freopen ("numarare.in","r",stdin);
    freopen ("numarare.out","w",stdout);

    read ();
    solve ();

    return 0;
}