Cod sursa(job #479835)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 25 august 2010 14:03:38
Problema Numarare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>
#include<algorithm>
#define Nmax 100010
using namespace std;

int v[Nmax], L[Nmax], i, n, pal, sol ;

int main()
{
	freopen("numarare.in","r",stdin);
	freopen("numarare.out","w",stdout);
	
	scanf("%d",&n);
	
	for( i = 1 ; i <= n ; i++ )
	{
		scanf("%d",&v[i]);
		
		if( i > 1 ) v[i-1] -= v[i] ;
	}
	
	n--; sol = n; pal = 1 ;
	
	for( i = 1 ; i <= n ; i++ ) 
	{
		if ( i < pal + L[pal] ) 
			L[i] = min( L[ 2*pal - i ] , pal + L[pal] - i ) ;
		
		if ( i + L[i] >= pal + L[pal] )
		{
			pal = i ;
			
			while (  i - L[i] - 1 >= 1 && i + L[i] + 1 <= n && v[ i - L[i] - 1 ] == v[ i + L[i] + 1 ] )
				L[i]++;
		}
	}
	
	for( i = 1 ; i <= n ; i++ )
		sol += L[i];
	
	printf("%d",sol);
	
	return 0;
}