Pagini recente » Cod sursa (job #297254) | Cod sursa (job #2774352) | Cod sursa (job #1165501) | Cod sursa (job #228102) | Cod sursa (job #37111)
Cod sursa(job #37111)
#include <stdio.h>
#include <algorithm>
#define minim(a, b) ((a < b) ? a : b)
#define A first.first
#define B first.second
#define ord second
#define ll long long
using namespace std;
int N, C, uz[32];
pair<pair<int, int>,int> V[32];
ll L, bst = 0;
ll can_be(ll L, int X, int Y)
{
int i; ll E = 1;
for (i = 1; i <= Y; i++)
{
E *= X;
if (E > L) return 0;
}
return E;
}
int main(void)
{
int i; ll E = 0;
freopen("shop.in", "r", stdin);
freopen("shop.out", "w", stdout);
scanf("%d %d %lld", &N, &C, &L);
for (i = 1; i <= N; i++)
{
scanf("%d %d", &V[i].A, &V[i].B);
V[i].ord = i;
}
sort(V+1, V+N+1);
for (i = N; i >= 1; i--)
{
if (!(E = can_be(L, C, V[i].A))) continue;
uz[V[i].ord] = (int)(minim(L/E, V[i].B));
bst += uz[V[i].ord];
L -= (ll)uz[V[i].ord] * E;
}
printf("%lld\n", bst);
for (i = 1; i < N; i++)
printf("%d ", uz[i]);
printf("%d\n", uz[N]);
return 0;
}