Cod sursa(job #2461708)

Utilizator ardutgamerAndrei Bancila ardutgamer Data 26 septembrie 2019 00:15:08
Problema Numarare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

const int NMAX = 100005;
const int INF = 1000000000;

int v[NMAX];
int cnt[NMAX];

int main()
{
    ifstream cin("numarare.in");
    ofstream cout("numarare.out");
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> v[i];
		v[i - 1] = v[i] - v[i - 1];
	}
	v[0] = -INF; v[n] = INF;
	int mirror;
	int R=0,C=0,sol=0;
	for (int i = 1; i < n; i++)
	{
		mirror = 2 * C - i;
		if (i <= R) cnt[i] = min(cnt[mirror], R - i);
		else
            cnt[i] = 1;
		while (v[i + cnt[i]] == v[i - cnt[i]])
			cnt[i]++;
		if (cnt[i] + i - 1> R)
		{
			R = cnt[i] + i - 1;
			C = i;
		}
		sol += cnt[i];
	}
	cout << sol << "\n";
	return 0;
}