Cod sursa(job #2074746)

Utilizator MoodyFaresFares Mohamad MoodyFares Data 24 noiembrie 2017 23:18:53
Problema Shop Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <cmath>
#include <algorithm>

const long long MAX_N = 30;

struct Coin {
  long long exp;
  long long qnt;
  long long p;
  long long poz;
};

Coin a[1 + MAX_N];

bool cmp1(Coin a, Coin b) {
  return a.p > b.p;
}

bool cmp2(Coin a, Coin b) {
  return a.poz < b.poz;
}

int main() {
  freopen("shop.in", "r", stdin);
  freopen("shop.out", "w", stdout);
  
  long long N;
  long long C, L;
  scanf("%lld%lld%lld", &N, &C, &L);
  for (long long i = 1; i <= N; i++) {
    long long exp, qnt;
    scanf("%lld%lld", &exp, &qnt);
    a[i] = {exp, qnt, (long long)pow(C, exp), i};
  }
  std::sort(a + 1, a + N + 1, cmp1);
  long long k = 1;
  long long ans = 0;
  while (k <= N && L) {
    long long cat = L / a[k].p;
    L -= std::min(a[k].qnt, cat) * a[k].p;
    a[k].qnt = std::min(a[k].qnt, cat);
    ans += a[k].qnt;
    k++;
  }
  printf("%lld\n", ans);
  std::sort(a + 1, a + N + 1, cmp2);
  for (long long i = 1; i <= N; i++) {
    printf("%lld ", a[i].qnt);
  }
  printf("\n");
  return 0;
}