Codeforces
CF Step
Youtube Linkedin Discord Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Code: Interval Mod

#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <vector>
using namespace std;
long long a[100001];
long long a_q[100001];
void solve() {
    long long n, k, p, q;
    cin >> n >> k >> p >> q;

    vector<long long> c0(n);
    vector<long long> c1(n);
    vector<long long> cmin(n);

    long long total_min = 0;

    for (int i = 0; i < n; i++) {
        long long a;
        cin >> a;
        c0[i] = a % p;
        c1[i] = (a % q) % p;
        cmin[i] = min(c0[i], c1[i]);
        total_min += cmin[i];
    }

    vector<long long> pref_c0(n + 1, 0);
    vector<long long> pref_c1(n + 1, 0);
    vector<long long> pref_cmin(n + 1, 0);

    for (int i = 0; i < n; i++) {
        pref_c0[i + 1] = pref_c0[i] + c0[i];
        pref_c1[i + 1] = pref_c1[i] + c1[i];
        pref_cmin[i + 1] = pref_cmin[i] + cmin[i];
    }

    long long ans = -1;

    for (int i = 0; i <= n - k; i++) {
        long long cost0 = total_min - (pref_cmin[i + k] - pref_cmin[i]) +
                          (pref_c0[i + k] - pref_c0[i]);

        if (ans == -1 || cost0 < ans)
            ans = cost0;

        long long cost1 = total_min - (pref_cmin[i + k] - pref_cmin[i]) +
                          (pref_c1[i + k] - pref_c1[i]);

        if (ans == -1 || cost1 < ans)
            ans = cost1;
    }

    cout << ans << "\n";
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}