Pagini recente » Cod sursa (job #2703658) | Cod sursa (job #105082) | Cod sursa (job #125510) | Cod sursa (job #2299849) | Cod sursa (job #44045)
Cod sursa(job #44045)
#include <stdio.h>
#include <stdlib.h>
long N,C,i,j,ind[34],A[34],B[34];
long long L,p[34],min,u[34],s;
int comp(const void* n1,const void* n2){
return A[*((long*)n1)]-A[*((long*)n2)];
}
int main(){
freopen("shop.in","r",stdin);
freopen("shop.out","w",stdout);
scanf("%d %d %I64d",&N,&C,&L);
for (i=1;i<=N;i++)scanf("%d %d",&A[i],&B[i]);
A[0]=-1;
p[0]=1;i=1;
while ((long long)p[i-1]<=(long long)1<<61){
p[i]=(long long)p[i-1]*C;
//printf("%I64d\n",p[i]);
i++;
}
for (i=0;i<=N;i++)ind[i]=i;
qsort(ind,N+1,sizeof(int),comp);
i=N;
//for (i=1;i<=N;i++)printf("%d\n",B[i]);
s=0;
while (L&&i){
if (p[A[ind[i]]])min=L/p[A[ind[i]]];
if (B[ind[i]]<min)min=B[ind[i]];
u[ind[i]]=min;
s+=min;
L=(long long)L-min*p[A[ind[i]]];
i--;
}
printf("%I64d\n",s);
for (i=1;i<=N;i++)printf("%I64d ",u[i]);
//printf("%I64d",min);
printf("\n");
return 0;
}