Cod sursa(job #2456495)

Utilizator bluestorm57Vasile T bluestorm57 Data 14 septembrie 2019 14:55:28
Problema Shop Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 35;
long long n,c,l,rez,ans,ansid[NMAX];
struct VAR{
    pair <long long, int> Pair;
    int id;
}v[NMAX];

long long power(long long c, long long x){
    rez = 1;
    while(x){
        if(x & 1){
            rez = rez * c;
            x--;
        }else{
            c = c * c;
            x /= 2;
        }
    }
    return rez;
}

bool cmp(VAR X, VAR Y){
    return X.Pair.first < Y.Pair.first;
}

int main(){
    int i;
    long long value;
    f >> n >> c >> l;
    for(i = 1 ; i <= n ; i++){
        f >> v[i].Pair.first >> v[i].Pair.second;
        v[i].id = i;
        v[i].Pair.first = power(c,v[i].Pair.first);
    }

    sort(v + 1, v + n + 1, cmp);

    for(i = n ; i >= 1 && l; i--){
        value = v[i].Pair.second * v[i].Pair.first;
        if(value <= l){
            l -= value;
            ansid[v[i].id] = v[i].Pair.second;
            ans += v[i].Pair.second;
        }else{
            ans += (l / v[i].Pair.first);
            ansid[v[i].id] = l / v[i].Pair.first;
            l -= v[i].Pair.first * ansid[v[i].id];
        }
    }
    g << ans << "\n";
    for(i = 1 ; i <= n ; i++)
        g << ansid[i] << " ";
    return 0;
}