Pagini recente » Cod sursa (job #1787181) | Cod sursa (job #3134230) | Cod sursa (job #1928217) | Cod sursa (job #1379281) | Cod sursa (job #1783642)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream in("shop.in");
ofstream out("shop.out");
int n, c, l;
struct moneda{
int val, b, id, folosit;
}m[35];
void citire(){
int valoare;
in>>n>>c>>l;
for(int i=1; i<=n; i++){
in>>valoare;
m[i].val=pow(c, valoare);
in>>m[i].b;
m[i].id=i;
}
}
bool compare(moneda a, moneda b){
return a.val<b.val;
}
bool acompare(moneda a, moneda b){
return a.id<b.id;
}
int utilizari(){
int utilizari=0;
for(int i=1; i<=n; i++){
utilizari+=m[i].folosit;
}
return utilizari;
}
void greedy(){
int suma=0;
sort(m+1, m+n+1, compare);
reverse(m+1, m+n+1);
//while()
int n=1;
while(suma<l){
if(suma<=l-m[n].val and m[n].folosit<m[n].b){
suma+=m[n].val;
m[n].folosit++;
}
else n++;
}
sort(m+1, m+n+1, acompare);
out<<utilizari()<<endl;
for(int i=1; i<=n; i++){
out<<m[i].folosit<<" ";
}
}
int main()
{
citire();
greedy();
return 0;
}