Pagini recente » Cod sursa (job #3343817) | Cod sursa (job #2498189) | Cod sursa (job #3279368) | Cod sursa (job #3319138) | Cod sursa (job #3324193)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main() {
ifstream cin("numarare.in");
ofstream cout("numarare.out");
int N;
cin >> N;
vector <int> s(N);
for (auto& x : s) {
cin >> x;
}
int M = N - 1;
vector <int> diff(M);
for (int i = 0;i + 1 < N;++i) {
diff[i] = s[i] - s[i + 1];
}
vector <int> z(M);
int left = 0, right = 1;
for (int i = 1;i < M;++i) {
z[i] = min(right - i, z[left + (right - i)]);
while (i + z[i] < M && i - z[i] >= 0 && diff[i - z[i]] == diff[i + z[i]]) {
z[i] += 1;
}
if (i + z[i] > right) {
left = i - z[i];
right = i + z[i];
}
}
z[0] = 1;
long long answer = 0;
for (int i = 0;i < M;++i) {
answer += z[i];
}
cout << answer << "\n";
return 0;
}