Pagini recente » Cod sursa (job #2126432) | Cod sursa (job #351961) | Cod sursa (job #448726) | Cod sursa (job #2530269) | Cod sursa (job #997477)
Cod sursa(job #997477)
#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 ;
}