Pagini recente » Cod sursa (job #1930129) | Cod sursa (job #2670615) | Cod sursa (job #2117431) | Cod sursa (job #1735354) | Cod sursa (job #479835)
Cod sursa(job #479835)
#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;
}