Cod sursa(job #821927)

Utilizator Catah15Catalin Haidau Catah15 Data 22 noiembrie 2012 19:55:19
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#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;
}