Cod sursa(job #37097)

Utilizator filipbFilip Cristian Buruiana filipb Data 24 martie 2007 16:50:24
Problema Shop Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#include <algorithm>
#define minim(a, b) ((a < b) ? a : b)
#define A first.first
#define B first.second
#define ord second
#define ll long long

using namespace std;

int N, C, uz[32];
pair<pair<int, int>,int> V[32];
ll L, bst = 0;

int can_be(ll L, int X, int Y)
{
    int i; ll E = 1;
    
    for (i = 1; i <= Y; i++)
    {
        E *= X;
        if (E > L) return 0;
    }
    return E;
}

int main(void)
{
    int i, j; ll E = 0;
    
    freopen("shop.in", "r", stdin);
    freopen("shop.out", "w", stdout);
    
    scanf("%d %d %I64d", &N, &C, &L);
    for (i = 1; i <= N; i++)
    {
        scanf("%d %d", &V[i].A, &V[i].B);
        V[i].ord = i;
    }
    
    sort(V+1, V+N+1);

    for (i = N; i >= 1; i--)
    {
        if (!(E = can_be(L, C, V[i].A))) continue;
        
        
        uz[V[i].ord] = (int)(minim(L/E, V[i].B)); 
        bst += uz[V[i].ord];
        L -= (ll)uz[V[i].ord] * E;
    }
        
    printf("%lld\n", bst);
    for (i = 1; i < N; i++)
        printf("%d ", uz[i]);
    printf("%d\n", uz[N]);
    
    return 0;
}