Cod sursa(job #1745491)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 22 august 2016 00:07:28
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
#define NMax 31
#define ll long long

using namespace std;
struct caract{
    ll a,b,in;
};

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

caract v[NMax];
ll n,c,l,ANS;
ll ans[NMax],inv[NMax];

bool cmp(caract x, caract y){
    return(x.a < y.a);
}
ll pow(ll x,ll p){
    ll ans = 1;
    while(p>0){
        if(p % 2 == 1){
            ans = ans * x;
            --p;
        }
        p/=2;
        x*=x;
    }
    return ans;
}
int main()
{
    f >> n >> c >> l;
    for(ll i = 1; i <= n; ++i){
        f >> v[i].a >> v[i].b;
        v[i].in = i;
    }
    sort(v + 1, v + 1 + n,cmp);
    for(ll i = 1; i <= n; ++i){
        inv[v[i].in] = i;
    }
    for(ll i = n; i >= 1 && l != 0; --i){
        ll w = pow(c,v[i].a);
        ll mx = l / w;
        if(mx > v[i].b){
            l -= (v[i].b * w);
            ans[i] = v[i].b;
            ANS += v[i].b;
        }else{
            l -= (mx * w);
            ans[i] = mx;
            ANS += mx;
        }
    }
    g << ANS << '\n';
    for(ll i = 1; i <= n; ++i){
        g << ans[inv[i]] << ' ';
    }
    return 0;
}