Pagini recente » Cod sursa (job #2350306) | Cod sursa (job #1273937) | Cod sursa (job #135894) | Cod sursa (job #1902692) | Cod sursa (job #199981)
Cod sursa(job #199981)
#define task "shop"
#define score 100
#include <stdio.h>
#include <stdlib.h>
#define fin "shop.in"
#define fout "shop.out"
#define ferr "shop.err"
#define N 32
long long a[N];
int b[N];
int n,c,l;
int cate[N];
int poz[N];
void scan(void){
int i,x,aux,j;
long long aux1;
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
//freopen(ferr,"w",stderr);
scanf("%d%d%d",&n,&c,&l);
for (i=1;i<=n;++i){
a[i]=1;poz[i]=i;
scanf("%d%d",&x,&b[i]);
for (j=1;j<=x;++j)
a[i]*=c;
}
for (i=1;i<n;++i)
for (j=i+1;j<=n;++j){
if (a[i]>a[j]){
aux1=a[i];
a[i]=a[j];
a[j]=aux1;
aux=b[i];
b[i]=b[j];
b[j]=aux;
aux=poz[i];
poz[i]=poz[j];
poz[j]=aux;
}
}
}
int min(int a,int b){
if (a>b)
return b;
return a;
}
void solve(void){
int i,poz=n;
while (l){
while (a[poz]>(long long )l && poz>=1)
--poz;
//if (poz<1)
//return;
cate[poz]=min(l/a[poz],b[poz]);
b[poz]-=cate[poz];
--poz;
l-=cate[poz+1]*a[poz+1];
//fprintf(stderr,"%d %d\n",l,a[poz]);
}
}
int sol[N];
void print(void){
int i,s=0;
for (i=1;i<=n;++i){
s+=cate[i];
sol[poz[i]]=cate[i];
}
printf("%d\n",s);
for (i=1;i<=n;++i)
printf("%d ",sol[i]);
printf("\n");
/*for (i=1;i<=n;++i)
printf("%lld ",a[i]);
printf("\n");
for (i=1;i<=n;++i)
printf("%d ",b[i]);*/
exit(0);
}
int main(void){
scan();
solve();
print();
}