Cod sursa(job #2458291)

Utilizator mircearoataMircea Roata Palade mircearoata Data 20 septembrie 2019 09:43:54
Problema Numarare Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream in("numarare.in");
ofstream out("numarare.out");

int v[100005];
int cnt[2000001];
int n, l, r, k;
long long ans;

int main()
{
	in >> n;
	for (int i = 0; i < n; i++)
		in >> v[2 * i + 1];
	for (int i = 2; i < 2 * n - 1; i += 2)
	{
		if (i > r)
			k = 1;
		else
			k = min(cnt[l + r - i], r - i);
		while (i + k < 2 * n && i - k >= 0 && v[i + k] + v[i - k] == v[i + k - 2] + v[i - k + 2])
			k += 2;
		cnt[i] = (k -= 2) + 2;
		if (i + k > r)
		{
			r = i + k;
			l = i - k;
		}
	}
	for (int i = 2; i < 2 * n - 1; i += 2)
		ans += (cnt[i] - 1) / 2;
	out << ans;
	return 0;
}