Cod sursa(job #1517949)

Utilizator catu_bogdan_99Catu Bogdan catu_bogdan_99 Data 5 noiembrie 2015 01:17:34
Problema Shop Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>
#include <algorithm>
using namespace std;

#define long long int
#define lld d

int v[100];
int b[100];
int tt[100];

int sol[10000];

int put( int a, int bb ){

    int p = 1;

    while( bb > 0 ){
        if( bb % 2 == 1 ){
            p *= a;
            bb--;
        }
        a *= a;
        bb /= 2;
    }

    return p;

}

int main()
{

    freopen("shop.in","r",stdin);
    freopen("shop.out","w",stdout);


    int n, i, j, s, t, dt, k, l, ma;

    scanf("%d%d%d",&n,&k,&s);
    for( i = 1; i <= n; ++i ){
        scanf("%d%d",&v[i],&b[i]);
        tt[i] = i;
    }

    for( i = 1; i < n; ++i ){
        for( j = i + 1; j <= n; ++j )
        if( v[i] > v[j] ){
            swap(v[i],v[j]);
            swap(b[i],b[j]);
            swap(tt[i],tt[j]);
        }
    }

    l = 0;
    for( i = n; i >= 1; --i ){
        dt = put(k,v[i]);
        while( dt <= s && b[i] ){
            s -= dt;
            b[i]--;
            sol[tt[i]]++;
            l++;
                //i = - (1<<23);
        }
    }

    printf("%d\n",l);

    for( i = 1; i <= 100; ++i ){
        if( sol[i] > 0 ) printf("%d ",sol[i]);
    }

    return 0;
}