Pagini recente » Cod sursa (job #1709447) | Cod sursa (job #1038780) | Cod sursa (job #789869) | Cod sursa (job #47366) | Cod sursa (job #2074754)
#include <cstdio>
#include <cmath>
#include <algorithm>
const long long MAX_N = 30;
struct Coin {
long long exp;
long long qnt;
long long p;
long long poz;
};
Coin a[1 + MAX_N];
long long powC[100];
bool cmp1(Coin a, Coin b) {
return a.p > b.p;
}
bool cmp2(Coin a, Coin b) {
return a.poz < b.poz;
}
int main() {
freopen("shop.in", "r", stdin);
freopen("shop.out", "w", stdout);
long long N;
long long C, L;
scanf("%lld%lld%lld", &N, &C, &L);
powC[0] = 1;
for (long long i = 1; powC[i - 1] * C <= L; i++) {
powC[i] = powC[i - 1] * C;
}
for (long long i = 1; i <= N; i++) {
long long exp, qnt;
scanf("%lld%lld", &exp, &qnt);
a[i] = {exp, qnt, powC[exp], i};
}
std::sort(a + 1, a + N + 1, cmp1);
long long k = 1;
long long ans = 0;
while (k <= N && L) {
a[k].qnt = std::min(a[k].qnt, L / a[k].p);
L -= a[k].qnt * a[k].p;
ans += a[k].qnt;
k++;
}
printf("%lld\n", ans);
std::sort(a + 1, a + N + 1, cmp2);
for (long long i = 1; i <= N; i++) {
printf("%lld ", a[i].qnt);
}
printf("\n");
return 0;
}