Pagini recente » Cod sursa (job #1371078) | Cod sursa (job #867787) | Cod sursa (job #1930727) | Cod sursa (job #1210361) | Cod sursa (job #821927)
Cod sursa(job #821927)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
#define int64 long long
#define PB push_back
#define MKP make_pair
#define f first
#define s second
#define maxN 50
vector < pair <pair <int, int>, pair <int, int> > > A;
int sol[maxN];
int main()
{
freopen ("shop.in", "r", stdin);
freopen ("shop.out", "w", stdout);
int64 N, L, C;
scanf ("%lld %lld %lld", &N, &C, &L);
A.PB ( MKP (MKP (0, 0), MKP (0, 0)));
for (int i = 1; i <= N; ++ i)
{
A.PB ( MKP (MKP (0, 0), MKP (0, 0)));
scanf ("%d %d", &A[i].f.f, &A[i].f.s);
A[i].s.f = i;
}
sort (A.begin(), A.end());
for (int i = A.size() - 1; i >= 0; -- i)
{
int K = A[i].f.s;
int64 P = 1;
for (int j = 1; j <= A[i].f.f; ++ j) P *= C;
while (K)
{
if (L < P) break;
L -= P;
-- K;
A[i].s.s ++;
}
if (! L) break;
}
int Q = 0;
for (int i = 1; i <= N; ++ i) sol[A[i].s.f] = A[i].s.s, Q += A[i].s.s;
printf ("%d\n", Q);
for (int i = 1; i <= N; ++ i) printf ("%d ", sol[i]);
return 0;
}