Cod sursa(job #1508943)

Utilizator TonisonIlle Antoniu Nicolae Tonison Data 23 octombrie 2015 10:49:05
Problema Shop Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream f("shop.in");
ofstream g("shop.out");

struct monede
{
    int poz;
    int exponent;
    int numar;
    long long valoare;
};

bool cmp_monede(const monede a, const monede b){
    return a.valoare > b.valoare;
}

int main()
{
    int n, c, p1, p2, nrbani=0;
    vector<short> numere(n, 0);
    long long l;
    f>>n>>c>>l;

    vector<long long> puteri(33, 1);


    for(int i=1; i<=32; i++)
    {
        puteri[i]=puteri[i-1]*c;
    }

    vector<monede> bani(n);

    for(int i=0; i<n; i++)
    {
        f>>p1>>p2;
        bani[i].exponent=p1;
        bani[i].numar=p2;
        bani[i].valoare=puteri[p1];
        bani[i].poz=i;
    }


    sort(begin(bani), end(bani), cmp_monede);

    int i=0;

    while((l>0)&&(i<n))
    {
        int suma_p=0;
        suma_p=bani[i].valoare * bani[i].numar;

        if(l>=suma_p)
        {
            l=l-suma_p;
            nrbani+=bani[i].numar;
            numere[bani[i].poz]=bani[i].numar;

        }
        else
        {
            numere[bani[i].poz]=l/bani[i].valoare;
            nrbani+=numere[bani[i].poz];
            l=l-(numere[bani[i].poz] * bani[i].valoare);

        }
        i++;
    }
    g<<nrbani<<"\n";
    for(int i=0; i<n; i++)
    {
        g<<numere[i]<<" ";
    }
    return 0;
}