Cod sursa(job #68886)

Utilizator c_sebiSebastian Crisan c_sebi Data 29 iunie 2007 18:43:40
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
#include <math.h>

long long a[33], b[33], ind[33], nr[33], n, C, L;

void read() {
	int i;
	long long p, x;
	FILE *f=fopen ("shop.in", "r");
	fscanf (f, "%lld %lld %lld", &n, &C, &L);
	for (i=0; i<n; ++i){
		fscanf (f, "%lld %lld", &p, &x);
		b[p]=x; a[p]=1; ind[p]=i+1;
	}
	fclose(f);
}

int main() {
	int found, i, j;
	long long p, exp, NR=0;
	read();
	while (L) {
	for (i=32, found=0; i>=0&&!found; --i) {
		if (a[i]){
			p=pow(C, i);
			if (p <= L){
				(L/p > b[i])?(exp=b[i]):(exp=L/p);
				nr[i]+=exp;	NR+=exp;
				L-=(exp*p);
				a[i]=0;
				found=1;
			}
		}
	}
	}
	FILE *g=fopen ("shop.out", "w");
	fprintf (g, "%lld\n", NR);
	for (i=1; i<=n; ++i)
		for (j=0; j<33; ++j)
			if (ind[j]==i)
				fprintf (g, "%lld ", nr[j]);
	fprintf (g, "\n");
	fclose(g);
	return 0;
}