Cod sursa(job #1144174)

Utilizator apopeid14Apopei Daniel apopeid14 Data 16 martie 2014 18:58:24
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 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';
 
}