Cod sursa(job #844854)

Utilizator informatician28Andrei Dinu informatician28 Data 29 decembrie 2012 21:11:02
Problema Shop Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <algorithm>
#define DIM 31

using namespace std;

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

struct moneda
{
    int pos, val, no_times;
}M[DIM];
int N, C, Sol;
long long L;

bool comp (const moneda &unu, const moneda &doi)
{
    return unu.val > doi.val;
}

bool comp2 (const moneda &unu, const moneda &doi)
{
    if (unu.pos > doi.pos) return unu.pos < doi.pos;
}

int minim (int a, int b)
{
    if (a < b) return a;
    else return b;
}

int main()
{
    int i, k, A;

    in >> N >> C >> L;
    for (i = 1; i <= N; i++)
    {
        in >> A >> M[i].no_times;
        M[i].pos = i;
        M[i].val = 1;
        for (int j = 1; j <= A; j++)
        {
            M[i].val *= C;
        }
    }
    sort(M + 1, M + N + 1, comp);
    for (i = 1; i <= N && L; i++)
    {
        k = minim(M[i].no_times, L/M[i].val);
        L -= (long long)(k*M[i].val);
        M[i].no_times = k;
        Sol += k;
    }
    sort(M + 1, M + N + 1, comp2);
    out << Sol << '\n';
    for (i = 1; i <= N; i++)
    {
        out << M[i].no_times << " ";
    }
    return 0;
}