Pagini recente » Cod sursa (job #1528494) | Cod sursa (job #2379543) | Cod sursa (job #374948) | Cod sursa (job #2827664) | Cod sursa (job #484805)
Cod sursa(job #484805)
# include <cstdio>
const char FIN[] = "numarare.in", FOU[] = "numarare.out" ;
const int MAX = 100005;
int S[MAX], B[MAX], best[MAX] ;
int N, sol ;
inline int min ( int A, int B ) {
if ( A < B ) {
return A ;
} else {
return B ;
}
}
int main ( void ) {
freopen ( FIN, "r", stdin ) ;
scanf ( "%d", &N ) ;
for ( int i = 1; i <= N; ++i ) {
scanf ( "%d", S + i ) ;
if ( i > 1 ) {
B[i - 1] = S[i - 1] - S[i] ;
}
}
int a = 1, b = 1 ;
for ( int i = 1; i < N; ++i ) {
if ( i < a ) {
best[i] = min ( best[ b - ( i - b ) ], a - i + 1 ) ;
}
for ( int st = i - best[i], dr = i + best[i] ; st && dr < N ; B[st] == B[dr] ? ( --st, ++dr, ++best[i] ) : dr = N ) {
if ( a < i + best[i] - 1 ) {
a = i + best[i] - 1 ;
b = i ;
}
}
sol += best[i];
}
fprintf ( fopen ( FOU, "w" ) , "%d" , sol ) ;
return 0;
}