Pagini recente » Cod sursa (job #1688394) | Cod sursa (job #2067256) | Cod sursa (job #439339) | Cod sursa (job #1707338) | Cod sursa (job #2245388)
#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 {int Val; int Poz; int Nr;} M[NMAX];
int N,i,Sum,Baza,X,Total,Answer[NMAX];
bool comparare(moneda X,moneda Y)
{
if(X.Val<Y.Val) return 1;
return 0;
}
int putere(int A,int B)
{
int Rez=1;
for(int i=1; i<=B; ++i) Rez*=A;
return Rez;
}
int main()
{
fscanf(fin,"%d%d%d",&N,&Baza,&Sum);
for(i=1; i<=N; ++i)
{
fscanf(fin,"%d%d",&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,"%d\n",Total);
for(i=1; i<=N; ++i) fprintf(fout,"%d ",Answer[i]);
return 0;
}