Cod sursa(job #251112)

Utilizator Mishu91Andrei Misarca Mishu91 Data 1 februarie 2009 21:54:04
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define MAX_N 35

int A[MAX_N], B[MAX_N], I[MAX_N], Sol[MAX_N];
int N, C;
long long L;

struct cmp
{
    bool operator() (const int a, const int b) const
    {
        return A[a] > A[b];
    }
};

long long pow(int a, int p)
{
    long long rez = 1;
    long long aux = a;

    while(p)
    {
        if(p & 1)
            rez *= aux;
        p >>= 1;
        aux *= aux;
    }
    return rez;
}

void citire()
{
    scanf("%d %d %lld",&N, &C, &L);

    for(int i = 1; i <= N; ++i)
    {
        scanf("%d %d",A+i, B+i);
        I[i] = i;
    }
}

void solve()
{
    sort(I+1, I+N+1, cmp());

    for(int i = 1; i <= N; ++i)
    {
        long long act = pow(C, A[I[i]]);

        long long j = L/act;
        int nr = min((int)j, B[I[i]]);
        Sol[I[i]] = nr;
        L -= act*nr;

        if(L == 0)
            break;
    }

    int rez = 0;
    for(int i = 1; i <= N; ++i)
        rez += Sol[i];
    printf("%d\n",rez);

    for(int i = 1; i <= N; ++i)
        printf("%d ",Sol[i]);
}

int main()
{
    freopen("shop.in","rt",stdin);
    freopen("shop.out","wt",stdout);

    citire();
    solve();
}