Cod sursa(job #213341)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 9 octombrie 2008 15:28:52
Problema Shop Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

struct ms {
	long long x, y, poz;
};


ms a[30];
long 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 long min(long long num1, long long num2) {
	if (num1 < num2) {
		return num1;
	}
	return num2;
}

int main() {
	freopen("shop.in", "r", stdin);
	freopen("shop.out", "w", stdout);
	scanf("%lld %lld %lld", &n, &c, &l);
	for (i = 1; i <= n; ++i) {
		scanf("%lld %lld", &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) {
		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("%lld\n", nmz);
	for (i = 1; i <= n; ++i) {
		printf("%lld ", y[i]);
	}
	return 0;
}