Pagini recente » Cod sursa (job #372642) | Cod sursa (job #2214057) | Cod sursa (job #1008675) | Cod sursa (job #2998769) | Cod sursa (job #1144174)
#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';
}