Cod sursa(job #1095488)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 31 ianuarie 2014 10:29:54
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <vector>

int main(){
	std::ifstream fin("shop.in");
	std::ofstream fout("shop.out");

	unsigned n;
	unsigned long long C, L;

	fin>>n>>C>>L;

	std::vector<unsigned> monede(33,0);
	std::vector<unsigned short> ordine(n);

	for(unsigned i=0;i<n;++i){
		unsigned x;
		fin>>x;
		fin>>monede[x];
		ordine[i]=x;
	}

	std::vector<unsigned> nrfolosit(33,0);
	unsigned long long total=0;

	unsigned icurr=32;
	while(monede[icurr]==0) --icurr;

	std::vector<unsigned long long> powC(icurr+1,0);
	powC[0]=1;
	unsigned long long currpow=C;
	for(unsigned i=1;i<=icurr;++i){ powC[i]=currpow; currpow*=C; }

	while(L>0){
		if(monede[icurr]-nrfolosit[icurr]==0||L<powC[icurr]) icurr--;
		else{
			unsigned long long times=L/powC[icurr];
			unsigned long long diff=monede[icurr]-nrfolosit[icurr];
			if(times>diff){
				nrfolosit[icurr]+=diff;
				total+=diff;
				L-=diff*powC[icurr];
			}
			else{
				nrfolosit[icurr]+=times;
				total+=times;
				L-=times*powC[icurr];
			}
			--icurr;
		}
	}

	fout<<total<<'\n';
	for(unsigned i=0;i<n;++i) fout<<nrfolosit[ordine[i]]<<' ';
	fout<<'\n';

}