Cod sursa(job #1783646)

Utilizator leonardmMihalcea Nicolae Leonard leonardm Data 19 octombrie 2016 11:58:53
Problema Shop Scor 60
Compilator cpp Status done
Runda greedy_excelenta Marime 1.16 kb
#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 aux=1;
    while(suma<=l and aux<=n){
        if(suma<=l-m[aux].val and m[aux].folosit<m[aux].b){
            suma+=m[aux].val;
            m[aux].folosit++;
        }
        else aux++;
    }
    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;
}