Cod sursa(job #39542)

Utilizator swift90Ionut Bogdanescu swift90 Data 26 martie 2007 20:11:39
Problema Shop Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<stdio.h>
struct bani{
	int v,nr,poz,con;
};
long long val[33];
bani x[35];
int main(){
	FILE*in=fopen("shop.in","r");
	FILE*out=fopen("shop.out","w");
	int n,c,i,pmin,j,nec;
	long long l,s=0,m=0;
	fscanf(in,"%d %d %lld",&n,&c,&l);
	for(i=0;i<n;i++){
		fscanf(in,"%d %d",&x[i].v,&x[i].nr);
		x[i].poz=i;
	}
	
	for(i=0;i<n-1;i++){
		pmin=i;
		for(j=i+1;j<n;j++){
			if(x[j].v<x[pmin].v)
				pmin=j;
		}
		if(i!=pmin){
			x[35]=x[i];
			x[i]=x[pmin];
			x[pmin]=x[35];
		}
	}
	
	val[0]=1;
	for(j=1;j<=x[n-1].v;j++){
		val[j]=val[j-1]*c;
	}
	i=n-1;
	while((s!=l)&&(i>-1)){
		if(x[i].nr){
			if(val[x[i].v]<=l-s)
				nec=(l-s)/val[x[i].v];
			if(nec<=x[i].nr){
				s=s+val[x[i].v]*nec;
				x[i].con=nec;
				m=m+nec;
			}
			else{
				s=s+val[x[i].v]*x[i].nr;
				x[i].con=x[i].nr;
				m=m+x[i].nr;
			}
		}
		i--;
	}
	
	for(i=0;i<n-1;i++){
		pmin=i;
		for(j=i+1;j<n;j++){
			if(x[j].poz<x[pmin].poz)
				pmin=j;
		}
		if(i!=pmin){
			x[35]=x[i];
			x[i]=x[pmin];
			x[pmin]=x[35];
		}
	}
	
	fprintf(out,"%d\n",m);
	for(i=0;i<n;i++){
		fprintf(out,"%d",x[i].con);
		if(i<n-1)
			fprintf(out," ");
	}
	fprintf(out,"\n");
	
	fclose(in);
	fclose(out);
	
	return 0;
}