Cod sursa(job #1994472)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 25 iunie 2017 00:33:54
Problema Progresii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>

#define ll long long

FILE *fin = fopen("progresii.in", "r"), *fout = fopen("progresii.out", "w");

#define MAXN 100000

ll v[MAXN + 1], s[MAXN + 2];

int main() {
    int n, m;
    ll k, l;

    fscanf(fin, "%d%d%lld%lld", &n, &m, &k, &l);

    for (int i = 1; i <= n; i++) {
        fscanf(fin, "%lld", &v[i]);
        v[i] = l - v[i];
        k--;
    }

    bool ok = 1;
    for (int i = n; i > 0; i--) {
        if (ok) {
            s[i] = s[i + 1] + v[i] / m;
            if(s[i] > k)
                ok = 0;
        }
    }

    if (ok == 0) fprintf(fout, "-1\n");
    else {
        for (int i = 1; i <= n; i++) {
            if (v[i] + s[i + 1] <= k) {
                k -= v[i];
                fprintf(fout, "1\n");
            } else {
                ll x = v[i] / (k - s[i + 1] + 1) + 1;
                k -= v[i] / x;
                fprintf(fout, "%lld\n", x);
            }
        }
    }

    fclose(fin);
    fclose(fout);
    return 0;
}