Pagini recente » Cod sursa (job #761566) | Cod sursa (job #398416) | Cod sursa (job #1979812) | Cod sursa (job #1936596) | Cod sursa (job #2411680)
#include <fstream>
using namespace std;
ifstream cin ("numarare.in");
ofstream cout ("numarare.out");
int n;
long long sol;
int v[100005], dp[100005];
int main() {
cin >> n;
for(int i = 1; i <= n; i++)
cin >> v[i];
n--;
for(int i = 1; i <= n; i++)
v[i] -= v[i + 1];
int l = 1, r = 1;
sol = n;
for(int i = 2; i <= n; i++) {
if(i > r)
l = r = i;
else
dp[i] = min(dp[l + r - i], r - i);
if(i <= r && dp[i] != r - i)
continue;
l = i - dp[i]; r = i + dp[i];
while(r <= n && l && v[l] == v[r])
l--, r++;
l++, r--;
dp[i] = (r - l + 1) / 2;
sol += dp[i];
}
cout << sol;
return 0;
}