Pagini recente » Cod sursa (job #565628) | Cod sursa (job #581058) | Cod sursa (job #378645) | Cod sursa (job #2941443) | Cod sursa (job #55238)
Cod sursa(job #55238)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iostream>
#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];
int sol;
bool cmp(Moneda X, Moneda Y)
{
return X.a > Y.a;
}
long long Putere(int b, int e)
{
long long sol = 1;
for (int i = 1; i <= e; i++)
sol *= b;
return sol;
}
int main()
{
FILE *fin = fopen("shop.in", "r");
FILE *fout = fopen("shop.out", "w");
fscanf(fin, "%ld%ld%ld", &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;
while (L && i < N)
{
int x;
if (L / Putere(C, A[i].a) > A[i].b)
{
nrm[A[i].poz] = A[i].b;
sol += A[i].b;
L -= A[i].b * Putere(C, A[i].a);
}
else if (L / Putere(C, A[i].a))
{
nrm[A[i].poz] = L / Putere(C, A[i].a);
L -= nrm[A[i].poz] * Putere(C, A[i].a);
sol += nrm[A[i].poz];
}
i++;
}
fprintf(fout, "%d\n", sol);
for (int i = 0; i < N; i++)
fprintf(fout, "%d ", nrm[i]);
fclose(fin);
fclose(fout);
return 0;
}