Pagini recente » Cod sursa (job #411813) | Cod sursa (job #2237024) | Cod sursa (job #1622095) | Cod sursa (job #2895197) | Cod sursa (job #55271)
Cod sursa(job #55271)
#include <cstdio>
#include <vector>
#include <algorithm>
#define DIM 31
using namespace std;
long long int L, N, C;
struct Moneda {
int a, poz;
long long b;
};
vector <Moneda> A;
long long nrm[DIM];
long long sol;
bool cmp(Moneda X, Moneda Y)
{
return X.a > Y.a;
}
long long Putere( long long a, long long b )
{
if (b == 0) return 1;
if (b == 1) return a;
if ((b&1) == 0) return Putere(a, (b>>1)) * Putere(a, (b>>1));
return Putere(a, (b>>1)) * Putere(a, (b>>1)) * a;
}
int main()
{
FILE *fin = fopen("shop.in", "r");
FILE *fout = fopen("shop.out", "w");
fscanf(fin, "%lld%lld%lld", &N, &C, &L);
A.resize(N+1);
int i, x, y;
for (i = 0; i < N; i++)
{
fscanf(fin, "%d%d", &x, &y);
A[i].a = x;
A[i].b = y;
A[i].poz = i;
}
sort(A.begin(), A.end(), cmp);
i = 0;
long long u, v;
while (L && i < N)
{
u = Putere(C, A[i].a);
v = L / u;
if (v > A[i].b)
{
nrm[A[i].poz] = A[i].b;
sol += A[i].b;
L -= A[i].b * u;
}
else if (v)
{
nrm[A[i].poz] = v;
L -= nrm[A[i].poz] * u;
sol += nrm[A[i].poz];
}
i++;
}
fprintf(fout, "%lld\n", sol);
for (int i = 0; i < N; i++)
fprintf(fout, "%lld ", nrm[i]);
fclose(fin);
fclose(fout);
return 0;
}