Cod sursa(job #757808)

Utilizator darrenRares Buhai darren Data 13 iunie 2012 15:47:41
Problema Numarare Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <fstream>

using namespace std;

int N, A[200002], D[200002];
long long result;

int main()
{
	ifstream fin("numarare.in");
	ofstream fout("numarare.out");
	
	fin >> N;
	for (int i = 1; i <= N; ++i)
		fin >> 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)], last - mid + 1);
		sizenow = max(sizenow, 1);
		
		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;
		
		result += (sizenow + 1) / 2;
	}
	
	fout << result << '\n';
	
	fin.close();
	fout.close();
}