Pagini recente » Cod sursa (job #194333) | Cod sursa (job #3288227) | Cod sursa (job #1533801) | Cod sursa (job #1410634) | Cod sursa (job #46635)
Cod sursa(job #46635)
#include <cstdio>
#define INF "shop.in"
#define OUF "shop.out"
#define NMAX 32
#define ULL unsigned long long
#define MIN(a,b) ((a<b)?(a):(b))
struct moneda
{
int pt,ct,id;
ULL val;
}ban[NMAX];
ULL lpow(ULL base,ULL pw)
{
ULL rez=1,nr,aux,p;
nr=pw;p=base;
while(nr)
{
if(nr%2) rez*=p;
p*=p;nr/=2;
}
return rez;
}
int main()
{
FILE *in,*out;
int n,i,j;
ULL sol[NMAX]={0},sum=0;
ULL c,l;
moneda aux;
in=fopen(INF,"r");
out=fopen(OUF,"w");
fscanf(in,"%d %lld %lld",&n,&c,&l);
for(i=1;i<=n;i++)
{
fscanf(in,"%d %d",&ban[i].pt,&ban[i].ct);
ban[i].id=i;
ban[i].val=lpow(c,(ULL)ban[i].pt);
}
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(ban[i].pt<ban[j].pt)
{
aux=ban[i];
ban[i]=ban[j];
ban[j]=aux;
}
for(i=1;i<=n&&l;i++)
{
sum+=sol[ban[i].id]=MIN((l/ban[i].val),ban[i].ct);
l-=sol[ban[i].id]*ban[i].val;
}
fprintf(out,"%lld\n",sum);
for(i=1;i<=n;i++) fprintf(out,"%lld ",sol[i]);
fclose(in);fclose(out);
return 0;
}