Pagini recente » Cod sursa (job #698884) | Cod sursa (job #21622) | Cod sursa (job #1617461) | Cod sursa (job #138081) | Cod sursa (job #1508943)
#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;
}