Pagini recente » Rezultatele filtrării | Cod sursa (job #1994472)
#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;
}