Cod sursa(job #810324)

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

const int N = 110000;

int n, x[N], s, p[N], f;
char a[11*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 ter() {
	int r = 0, s = 0;
	
	if(a[f] == '-') {
		s = 1;
		++f;
	}
	
	while(a[f] >= '0' && a[f] <= '9')
		r = r * 10 + a[f++] - '0';
	++f;
	
	return s ? -r : r;
}

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