Pagini recente » Cod sursa (job #165553) | Cod sursa (job #1451317) | Cod sursa (job #701095) | Cod sursa (job #1194958) | Cod sursa (job #2166570)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("numarare.in");
ofstream out("numarare.out");
const int NMAX = 1e5;
int n, res;
int v[1 + NMAX];
int dp[1 + NMAX];
int main()
{
in >> n;
for(int i = 1; i <= n; i++)
in >> v[i];
for(int i = 1; i < n; i++)
v[i] -= v[i + 1];
n--;
int from = 1;
int to = 1;
res = n;
for(int i = 2; i <= n; i++) {
if(i <= to) {
dp[i] = min(to - i, dp[from + to - i]);
if(dp[i] == to - i) {
from = i - dp[i];
to = i + dp[i];
while(1 <= from && to <= n && v[from] == v[to]) {
from--;
to++;
}
from++;
to--;
dp[i] = (to - from + 1) / 2;
}
} else {
from = to = i;
while(1 <= from && to <= n && v[from] == v[to]) {
from--;
to++;
}
from++;
to--;
dp[i] = (to - from + 1) / 2;
}
res += dp[i];
}
out << res << '\n';
in.close();
out.close();
return 0;
}