Cod sursa(job #2025340)
Utilizator | Data | 22 septembrie 2017 16:40:25 | |
---|---|---|---|
Problema | Numarare | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.65 kb |
#include<fstream>
using namespace std;
ifstream fin("numarare.in");
ofstream fout("numarare.out");
int v[200005], D[200005], n, R, C;
long long sol = 0;
int main(){
fin >> n;
for( int i = 1; i <= n; i++ ){
fin >> v[i];
v[i - 1] -= v[i];
}
for( int i = 1; i < n; i++ ){
int mirr_poz =C*2-i;
if( i <= R )
D[i] = min( D[mirr_poz], R - i + 1 );
while(i-D[i]>=1 && i+D[i]<n && v[i-D[i]]==v[i+D[i]])
D[i]++;
if(i+D[i]- 1 > R ){
C = i;
R = i + D[i] - 1;
}
sol += D[i];
}
fout << sol << "\n";
return 0;
}