Cod sursa(job #68311)

Utilizator DastasIonescu Vlad Dastas Data 27 iunie 2007 15:33:34
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <cmath>
#include <algorithm>

#define maxn 30

FILE *in = fopen("shop.in","r"), *out = fopen("shop.out","w");

struct monezi
{
    int a, b; // a = valoare, b = cantitate
};

int n, c;
long long l;

monezi a[maxn];

int nr[maxn];
int poz[maxn+3]; // pozitia in vectorul initial a monedei de tipul i
int total;

void read()
{
    fscanf(in, "%d %d %lld", &n, &c, &l);

    for ( int i = 0; i < n; ++i )
        fscanf(in, "%d %d", &a[i].a, &a[i].b), poz[a[i].a] = i;
}

bool operator<(const monezi &x, const monezi &y)
{
    return x.a < y.a;
}

int main()
{
    read();

    std::sort(a, a+n);

    for ( int i = n-1; i != -1; --i )
    {
        long long v = pow(c, a[i].a);
        while ( l-v >= 0 && a[i].b )
            l -= v, --a[i].b, ++total, ++nr[poz[a[i].a]];
    }

    fprintf(out, "%d\n", total);
    for ( int i = 0; i < n; ++i )
        fprintf(out, "%d ", nr[i]);

	return 0;
}