Pagini recente » Cod sursa (job #555364) | Cod sursa (job #141837) | Cod sursa (job #1293533) | Cod sursa (job #1562945) | Cod sursa (job #1335238)
#include <iostream>
#include <fstream>
#include <algorithm>
#define nmax 31
#define ll long long
using namespace std;
ifstream fin("shop.in");
ofstream fout("shop.out");
ll pow(ll x, ll p) {
if (p == 0)
return 1;
if (p == 1)
return x;
ll y = pow(x, p/2);
if (p % 2 == 0)
return y*y;
else
return y*y*x;
}
struct monezi {
ll power, cant, index;
} M[nmax];
ll n, c, l;
bool cmp(monezi a, monezi b) {
return a.power > b.power;
}
void citire() {
fin >> n >> c >> l;
for (int i = 1; i <= n; i++)
fin >> M[i].power >> M[i].cant,
M[i].index = i;
}
void solve() {
int Tip[nmax];
sort(M+1, M+n+1, cmp);
int rez = 0;
for (int i = 1; i <= n; i++) {
int nr = 0;
ll x = pow(c, M[i].power);
while (l - x >= 0 && M[i].cant > 0) {
l -= x;
M[i].cant--;
nr++;
}
rez += nr;
Tip[M[i].index] = nr;
}
fout << rez << "\n";
for (int i = 1; i <= n; i++)
fout << Tip[i] << " ";
}
int main() {
citire();
solve();
fin.close();
fout.close();
return 0;
}