Pagini recente » Cod sursa (job #518013) | Borderou de evaluare (job #1493670) | Cod sursa (job #2729989) | Cod sursa (job #2329350) | Cod sursa (job #775303)
Cod sursa(job #775303)
#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;
}