Cod sursa(job #810316)

Utilizator naruto_uzumakiNaruto Uzumaki naruto_uzumaki Data 10 noiembrie 2012 09:37:15
Problema Numarare Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include<iostream>
#include<cstdio>
using namespace std;

const int N = 110000;

int n, x[N], s, p[N];

void calcp() {
	int i, c, last = 0;
	
	for(i = 1; i!=n; ++i) {
		if(last > i)
			p[i] = min(last - i - 1, p[c - (i - c)]);
		
		for(; i - p[i] > 0 && i + p[i] + 1 <= n && x[i - p[i]] + x[i + p[i] + 1] == x[i] + x[i + 1]; ++p[i]);
		
		if(p[i] + i + 1 > last)
			last = p[i] + i + 1, c = i;
		
		s += p[i];
	}
}

int main() {
	int i;
	
	freopen("numarare.in", "r", stdin);
	freopen("numarare.out", "w", stdout);
	
	cin >> n;
	
	for(i = 1; i<=n; ++i)
		cin >> x[i];
	
	calcp();
	
	cout << s;
	
	return 0;
}