Cod sursa(job #1517948)

Utilizator catu_bogdan_99Catu Bogdan catu_bogdan_99 Data 5 noiembrie 2015 01:11:09
Problema Shop Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 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, d, 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;
    while( s > 0 ){
        for( i = n; i >= 1; --i ){
            d = put(k,v[i]);
            if( d <= s && b[i] ){
                s -= d;
                b[i]--;
                sol[tt[i]]++;
                l++;
                i = - (1<<23);
            }
        }
    }
    printf("%d\n",l);

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

    return 0;
}