Pagini recente » Cod sursa (job #695341) | Cod sursa (job #946748) | Cod sursa (job #555863) | Cod sursa (job #398794) | Cod sursa (job #214682)
Cod sursa(job #214682)
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
struct ms {
long x, y, poz;
};
ms a[30];
long n, c, l, i, aux, nmz, y[64];
int cmp(const void *w, const void *z) {
ms c = *(ms *)w, d = *(ms *)z;
if (c.y != d.y) {
return d.y - c.y;
}
return d.x - c.x;
}
long min(long num1, long num2) {
if (num1 < num2) {
return num1;
}
return num2;
}
int main() {
freopen("shop.in", "r", stdin);
freopen("shop.out", "w", stdout);
scanf("%ld %ld %ld", &n, &c, &l);
for (i = 1; i <= n; ++i) {
scanf("%ld %ld", &aux, &a[i].y);
a[i].x = 1 << aux;
a[i].poz = i;
}
qsort(a + 1, n, sizeof(a[0]), cmp);
aux = n;
while (l != 0 && aux > 0) {
y[a[aux].poz] = min((l / a[aux].x), a[aux].y);
nmz += y[a[aux].poz];
l -= y[a[aux].poz] * a[aux].x;
--aux;
}
printf("%ld\n", nmz);
for (i = 1; i <= n; ++i) {
printf("%ld ", y[i]);
}
printf("\n");
return 0;
}