Pagini recente » Cod sursa (job #1134176) | Cod sursa (job #1146087) | Cod sursa (job #176850) | Cod sursa (job #2704553) | Cod sursa (job #2074750)
#include <cstdio>
#include <cmath>
#include <algorithm>
const int MAX_N = 30;
struct Coin {
long long exp;
long long qnt;
long long p;
int 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);
int N;
long long C, L;
scanf("%d%lld%lld", &N, &C, &L);
powC[0] = 1;
for (int i = 1; powC[i - 1] * C <= L; i++) {
powC[i] = powC[i - 1] * C;
}
for (int 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);
int k = 1;
long long ans = 0;
while (k <= N && L) {
long long cat = L / a[k].p;
L -= std::min(a[k].qnt, cat) * a[k].p;
a[k].qnt = std::min(a[k].qnt, cat);
ans += a[k].qnt;
k++;
}
printf("%lld\n", ans);
std::sort(a + 1, a + N + 1, cmp2);
for (int i = 1; i <= N; i++) {
printf("%lld ", a[i].qnt);
}
printf("\n");
return 0;
}