Cod sursa(job #1994231)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 24 iunie 2017 13:48:45
Problema Progresii Scor 30
Compilator cpp Status done
Runda Simulare 16 Marime 0.87 kb
#include <cstdio>

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 ];
        cmin += p[ i ] / m + 1;
    }

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

    for (int i = 1; i <= n; ++ i) {
        cmin -= p[ i ] / m + 1;

        int ans = m;
        for (int step = n2; step > 0; step >>= 1) {
            if (ans - step > 0 && p[ i ] / (ans - step) + 1 <= k - cmin) {
                ans -= step;
            }
        }

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

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