Cod sursa(job #3324193)

Utilizator trifangrobertRobert Trifan trifangrobert Data 21 noiembrie 2025 16:52:18
Problema Numarare Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#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;
}