Pagini recente » Cod sursa (job #3152307) | Cod sursa (job #2385780) | Cod sursa (job #727867) | Cod sursa (job #2829950) | Cod sursa (job #2246140)
#include <stdio.h>
#include <algorithm>
#define NMAX 35
using namespace std;
FILE *fin=fopen("shop.in","r"); FILE *fout=fopen("shop.out","w");
struct moneda {long long int Val;long long int Poz;long long int Nr;} M[NMAX];
long long int N,i,Sum,Baza,X,Total,Answer[NMAX];
bool comparare(moneda X,moneda Y)
{
if(X.Val<Y.Val) return 1;
return 0;
}
long long int putere(long long int A,long long int B)
{
long long int Rez=1;
for(int i=1; i<=B; ++i) Rez*=A;
return Rez;
}
int main()
{
fscanf(fin,"%lld%lld%lld",&N,&Baza,&Sum);
for(i=1; i<=N; ++i)
{
fscanf(fin,"%lld%lld",&X,&M[i].Nr);
M[i].Val=putere(Baza,X);
M[i].Poz=i;
}
sort(M+1,M+N+1,comparare);
for(i=N; i>=1 and Sum>0; --i)
{
X=Sum/M[i].Val;
if(X>=M[i].Nr)
{
Answer[M[i].Poz]=M[i].Nr; Total+=M[i].Nr;
Sum-=M[i].Val*M[i].Nr;
}
else
{
Answer[M[i].Poz]=X; Total+=X;
Sum-=M[i].Val*X;
}
}
fprintf(fout,"%lld\n",Total);
for(i=1; i<=N; ++i) fprintf(fout,"%lld ",Answer[i]);
return 0;
}