Cod sursa(job #38924)

Utilizator crusRus Cristian crus Data 26 martie 2007 11:37:25
Problema Shop Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#define input "shop.in"
#define output "shop.out"
#define nmax 50
long n,c,a[nmax],i,poz,fol[nmax],lung;
long b[nmax],v[nmax];
long long p[nmax],min,cnt,l;
void citire()
{
	FILE *fin;
	fin=fopen(input,"r");
	fscanf(fin,"%ld %ld %ld",&n,&c,&l);
	for (i=1;i<=n;i++)
		fscanf(fin,"%ld %ld",&a[i],&b[i]);
	fclose(fin);
}
void afisare()
{
	min=0;
	for (i=1;i<=n;i++) min+=v[i];
	FILE *fout;
	fout=fopen(output,"w");
	fprintf(fout,"%lld\n",min);
	for (i=1;i<=n;i++)
		fprintf(fout,"%ld ",v[i]);
	fclose(fout);
}
void solve()
{
	p[0]=1; lung=0;
	while (c*p[lung]<=l) {lung++; p[lung]=c*p[lung-1];}
	while (l)
		{
		 poz=0;
		 for (i=1;i<=n;i++)
			 if ((!fol[i]) && (a[i]>=a[poz]) && (a[poz]<=l)) poz=i;
		 fol[poz]=1;
		 cnt=(long)(l/p[a[poz]]);
		 if (cnt<=b[poz]) {v[poz]=cnt; l-=cnt*p[a[poz]];}
			else {v[poz]=b[poz]; l-=b[poz]*p[a[poz]];}
		}
}
int main()
{
	citire();
	solve();
	afisare();
	return 0;
}