Cod sursa(job #38898)

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