Pagini recente » Cod sursa (job #2323871) | Cod sursa (job #1030907) | Cod sursa (job #393020) | Cod sursa (job #2437627) | Cod sursa (job #164247)
Cod sursa(job #164247)
#include <stdio.h>
#define nmax 100005
unsigned long long N, M, K, L, ok;
unsigned long long P[nmax], consum[nmax], V[nmax];
void read()
{
unsigned long long i;
freopen("progresii.in", "r", stdin);
scanf("%llu%llu%llu%llu", &N, &M, &K, &L);
for (i = 1; i <= N; ++i)
scanf("%llu", &P[i]);
}
void binary (unsigned long long i, unsigned long long l, unsigned long long r)
{
if (l > r)
return;
unsigned long long m = (l+r)>>1;
if (consum[i+1] + (L-P[i]) / m + 1 <= K)
{
ok = m;
binary(i, l, m-1);
}
else
binary(i, m+1, r);
}
void solve()
{
unsigned long long i;
// cat consuma playerii i, i+1, ... N alergand cu viteza maxima M?
for (i = N; i >= 1; i--)
consum[i] = consum[i+1] + (L-P[i]) / M + 1;
for (i = ok = 1; i <= N && ok; ++i)
{
ok = 0;
binary(i, 1, M);
if (ok)
{
V[i] = ok;
K -= (L-P[i]) / V[i] + 1;
}
}
}
void write()
{
unsigned long long i;
freopen("progresii.out", "w", stdout);
if (ok)
for (i = 1; i <= N; ++i)
printf("%llu\n", V[i]);
else
printf("-1\n");
}
int main()
{
read();
solve();
write();
return 0;
}