Cod sursa(job #1994313)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 24 iunie 2017 17:02:06
Problema Progresii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <algorithm>

using namespace std;

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

const int nmax = 1e5;
long long p[nmax + 1];

int main() {
    int n, m; long long k, l;
    fscanf(fin, "%d%d%lld%lld", &n, &m, &k, &l);

    long long cmin = 0;
    for (int i = 1; i <= n; ++ i) {
        fscanf (fin, "%lld", &p[ i ]);
        p[ i ] = l - p[ i ];

        if (p[ i ] >= 0) {
            cmin += p[ i ] / m + 1;
        }
    }

    int n2;
    for (n2 = 1; n2 <= m / 2; n2 <<= 1) {
    }

    if (cmin > k) {
        fprintf(fout, "-1\n");
    } else {
        for (int i = 1; i <= n; ++ i) {
            if (p[ i ] < 0) {
                fprintf(fout, "%d\n", 1);
                continue;
            }

            cmin -= p[ i ] / m + 1;

            int ans = p[ i ] / (k - cmin) + 1;
            ans = min(ans, m); ans = max(ans, 1);

            fprintf(fout, "%d\n", ans);
            k -= p[ i ] / ans + 1;
        }
    }

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