Cod sursa(job #918744)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 19 martie 2013 09:16:27
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
const int MAXN = 33;
int N, C;
int num[MAXN];
int sol[MAXN];
bool seen[MAXN];
long long L;
long long ppow[MAXN];
void precalc()
{
ppow[0] = 1;
for (int i = 1; i < MAXN; ++i)
ppow[i] = C * ppow[i - 1];
}
int doit()
{
int min_num = 0;
for (int i = MAXN - 1; i >= 0; --i) {
while (num[i] > 0 && L >= ppow[i]) {
int k = min((long long) num[i], L / ppow[i]);
L -= k * ppow[i];
num[i] -= k;
sol[i] += k;
min_num += k;
}
}
return min_num;
}
int main()
{
freopen("shop.in", "r", stdin);
freopen("shop.out", "w", stdout);
scanf("%d %d %lld", &N, &C, &L);
vector<int> coins;
for (int i = 0; i < N; ++i) {
int a, b;
scanf("%d %d", &a, &b);
num[a] += b;
coins.push_back(a);
}
precalc();
printf("%d\n", doit());
vector<int>::iterator it;
for (it = coins.begin(); it != coins.end(); ++it)
printf("%d ", sol[*it]);
printf("\n");
return 0;
}