Cod sursa(job #1335231)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 5 februarie 2015 11:28:09
Problema Shop Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define nmax 31
#define ll long long

using namespace std;

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

ll pow(ll x, ll p) {
    if (p == 0)
        return 1;
    if (p == 1)
        return x;
    int y = pow(x, p/2);
    if (p % 2 == 0)
        return y*y;
    else
        return y*y*x;
}

struct monezi {
    ll power, cant, index;
} M[nmax];

ll n, c, l;

bool cmp(monezi a, monezi b) {
    return a.power > b.power;
}

void citire() {
    fin >> n >> c >> l;
    for (int i = 1; i <= n; i++)
        fin >> M[i].power >> M[i].cant,
        M[i].index = i;
}

void solve() {
    int Tip[nmax];
    sort(M+1, M+n+1, cmp);
    int rez = 0;
    for (int i = 1; i <= n; i++) {
        Tip[M[i].index] = 0;
        int x = pow(c, M[i].power);
        while (l >= x && M[i].cant > 0) {
            l -= x;
            M[i].cant--;
            rez++;
            Tip[M[i].index]++;
        }
        if (l == 0)
            break;
    }
    fout << rez << "\n";
    for (int i = 1; i <= n; i++)
        fout << Tip[i] << " ";
}

int main() {

    citire();
    solve();

    fin.close();
    fout.close();

    return 0;
}