Cod sursa(job #997477)

Utilizator DorelBarbuBarbu Dorel DorelBarbu Data 14 septembrie 2013 11:38:15
Problema Shop Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define MAX_N 31
using namespace std;

int N, C , solution[MAX_N] ;

long long L ;

struct moneda
{
    long long A ;

    long long B ;

    long long tip ;
} ;

moneda v[MAX_N] ;

long long putere ( int i )
{
    long long  answer = 1 , j ;

    for( j = 1 ; j <= v[i].A ; j++ )
    {
        answer = 1LL * answer * C ;
    }

    return answer ;
}

bool comp( moneda x , moneda y )
{
    return (x.A > y.A) ;
}

long long minim( long long a , long long b )
{
    if( a < b ) return a ;

    return b ;
}

void citire()
{
    freopen("shop.in","r",stdin);

    scanf("%d %d %d", &N , &C , &L) ;

    int i ;

    for( i = 1 ; i <= N ; i++ )
    {
        scanf("%d %d", &v[i].A , &v[i].B ) ;

        v[i].tip = i ;
    }
}

int nr_monezi = 0 ;

void solve()
{
    long long i, used , aux ;

    for( i = 1 ; i <= N ; i++ )
    {
        aux = 1LL*L / putere( i ) ;

        used = minim( v[i].B , aux ) ;

        nr_monezi += used ;

        L -= used * putere( i ) ;

        solution[v[i].tip] = used ;
    }
}

int main()
{
    freopen("shop.out" , "w", stdout) ;

    citire() ;

    sort( v+1 , v+N+1 , comp ) ;

    solve() ;

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

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

    return 0 ;


}