Cod sursa(job #1209261)

Utilizator mihaimusatMihai Musat mihaimusat Data 17 iulie 2014 13:45:30
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <fstream>

using namespace std;

int n, a[200002], d[200002];
long long result;

int main()
{   ifstream f("numarare.in");
	ofstream g("numarare.out");

    f>>n;

	for (int i=1;i<=n;++i)
		f>>a[2*i-1];

	int mid=0,last=0;

	for (int i=2;i<=2*n-1;i+=2)
	{
		int sizenow=1;
		if (last>=i)
			sizenow=min(d[mid-(i-mid)],(mid-(i-mid))-(mid-(last-mid))+1);
		sizenow = max(sizenow,1);
		if (sizenow % 2 == 0)
            --sizenow;

		while (i-sizenow-2>=1 && i+sizenow+2<=2*n-1 && a[i-sizenow]+a[i+sizenow] == a[i-sizenow-2] + a[i+sizenow+2])
			sizenow += 2;
		if (i+sizenow>last)
			mid = i;
        last = i+sizenow;
		d[i] = sizenow;

		result += (sizenow+1)/2;
	}

	g<<result<<'\n';
	return 0;
}