Pagini recente » Cod sursa (job #2808918) | Cod sursa (job #3237485) | Cod sursa (job #1342028) | Cod sursa (job #1325210) | Cod sursa (job #1637066)
#include<fstream>
#include<algorithm>
#define MNOT 32 // maximum number of types(of coins)
using namespace std;
FILE*in;
ofstream out("shop.out");
int nr_of_types;
int base;
long long total_sum;
long long nr_of_coins_used[MNOT+2];
long long coins_sum;
struct coin
{
int A; // exponent
long long B; // number of coins
}COIN[MNOT], mirror_COIN[MNOT];
long long POWER(int BASE, int EXPO)
{
if (!EXPO)
return 1;
return BASE*POWER(BASE, EXPO-1);
}
long long condition(coin I, coin J)
{
return I.A>J.A;
}
void read()
{
in=fopen("shop.in", "r");
fscanf(in, "%d%d%lld", &nr_of_types, &base, &total_sum);
for (int i=1; i<=nr_of_types; i++)
{
fscanf(in, "%d%lld", &COIN[i].A, &COIN[i].B);
mirror_COIN[i].A=COIN[i].A;
mirror_COIN[i].B=COIN[i].B;
}
}
void build_nr_of_coins_used()
{
for (int i=1; i<=nr_of_types, total_sum; i++)
{
long long power=POWER(base, COIN[i].A);
long long D=total_sum/power;
nr_of_coins_used[COIN[i].A]=min(COIN[i].B, D);
coins_sum+=nr_of_coins_used[COIN[i].A];
total_sum-=(nr_of_coins_used[COIN[i].A]*power);
}
}
void solve()
{
sort(COIN+1, COIN+nr_of_types+1, condition);
build_nr_of_coins_used();
}
void show()
{
out<<coins_sum<<'\n';
for (int i=1; i<=nr_of_types; i++)
out<<nr_of_coins_used[mirror_COIN[i].A]<<" ";
}
int main()
{
read();
solve();
show();
return 0;
}