Cod sursa(job #466619)

Utilizator blasterzMircea Dima blasterz Data 27 iunie 2010 12:10:43
Problema Numarare Scor 30
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 1.41 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

#define dim 8192

using namespace std;

char ax[dim];
int pz;

inline void cit (int &x)
{
	x = 0;

	int neg = 0;

	while ((ax[pz] < '0' || ax[pz] > '9') && ax[pz] != '-')
		if (++pz == dim)
			fread (ax, 1, dim, stdin), pz = 0;

	if (ax[pz] == '-')
	{
		neg = 1;
		if (++pz == dim)
			fread (ax, 1, dim, stdin), pz = 0;
	}


	while (ax[pz] >= '0' && ax[pz] <= '9')
	{
		x = x * 10 + ax[pz] - '0';
		if (++pz == dim)
			fread (ax, 1, dim, stdin), pz = 0;
	}
	if (neg)
		x = -x;
}

int a[100001];
int n;

void solve ()
{
	int i, j, k;
	int s =0;

	long long sol = 0;

	for (i = 1; i < n; ++i)
	{
		s = a[i] + a[i + 1];

		for (j = i - 1, k = i + 2; j >= 1 && k <= n; --j, ++k)
			if (a[j] + a[k] != s)
				break;
		sol += i - j;
	}


	printf ("%lld\n", sol);

}

void brut ()
{
	long long sol = 0;
	int i, j, k;

	for (i = 1; i < n; ++i)
		for (j = i + 1; j <= n; ++j)
			if ((j - i) % 2 == 1)
			{
			

			}

}

void doit ()
{
	long long sol = 0;
	int i, j;

	int v;
	for (i = 1; i < n; ++i)
	{
		v = min (i, n - (i + 1) + 1);

		sol += (long long) v;
	}

	printf ("%lld\n", sol);

}
int main ()
{
	freopen ("numarare.in", "r", stdin);
	freopen ("numarare.out", "w", stdout);
	cit (n);
	int i;
	for (i = 1; i <= n; ++i)
		cit (a[i]);

	int ok = 1;

	for (i = 2; i <= n; ++i)
		if (a[i] != a[i - 1] + 1)
		{
			ok = 0;
			break;
		}

	if (ok)
		doit ();
	else
		solve ();



	return 0;
}