Cod sursa(job #775303)

Utilizator visanrVisan Radu visanr Data 7 august 2012 19:19:07
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <cstdio>
#include <vector>
#include <cstdlib>
#include <algorithm>
using namespace std;


struct moneda
{
       long long val;
       int nr, ind, used;
};
vector<moneda> v;

bool cmp1(moneda one, moneda two) { return one.val > two.val; }
bool cmp2(moneda one, moneda two) { return one.ind < two.ind; }

int N, C, sum = 0;
long long L;

long long lgput(int n, int p)
{
     if(p == 0) return 1;
     if(p & 1) return n * lgput(n, p - 1);
     long long x = lgput(n, p / 2);
     return x * x;
}

int main()
{
    freopen("shop.in", "r", stdin);
    freopen("shop.out", "w", stdout);
    int i;
    scanf("%i %i %lld", &N, &C, &L);
    for(i = 0; i < N; i++)
    {
          moneda New;
          scanf("%i %i", &New.val, &New.nr);
          New.val = lgput(C, New.val);
          New.ind = i;
          New.used = 0;
          v.push_back(New);
    }
    sort(v.begin(), v.end(), cmp1);
    for(i = 0; i < v.size() && L; i++)
    {
          int rap = L / v[i].val;
          if(rap > v[i].nr) rap = v[i].nr;
          v[i].used = rap;
          L -= rap * v[i].val;
          sum += rap;
    }
    sort(v.begin(), v.end(), cmp2);
    printf("%i\n", sum);
    for(i = 0; i < v.size(); i++) printf("%i ", v[i].used);
    return 0;
}