Cod sursa(job #752104)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 27 mai 2012 20:27:32
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>

#define maxn 100005

FILE*f=fopen("numarare.in","r");
FILE*g=fopen("numarare.out","w");

int n,stmax,drmax;
int v[maxn],D[maxn];

inline int min ( const int &a , const int &b ){
	return a <= b ? a : b;
}

int main () {
	
	fscanf(f,"%d",&n);
	for ( int i = 1 ; i <= n ; ++i ){
		fscanf(f,"%d",&v[i]);
	}
	
	for ( int i = 1 ; i < n ; ++i ){
		v[i] = v[i+1] - v[i];
	}
	v[n] = 0;
	
	for ( int i = 1 ; i < n ; ++i ){
		
		if ( i <= drmax ){
			D[i] = min(D[stmax+drmax-i],drmax-i);
			int p = i - D[i],u = i + D[i];
			for ( ; p > 0 && u < n && v[p] == v[u] ; ++D[i] , --p , ++u );
			if ( drmax < u-1 ){
				drmax = u-1; stmax = p+1;
			}
		}
		else{
			int p = i,u = i;
			for ( ; p > 0 && u < n && v[p] == v[u] ; ++D[i] , --p , ++u );
			drmax = u-1; stmax = p+1;
		}
	}
	
	long long sol = 0;
	for ( int i = 1 ; i < n ; ++i ){
		sol += D[i];
	}
	
	fprintf(g,"%d\n",sol);
	
	fclose(f);
	fclose(g);
	
	return 0;
}