Pagini recente » Cod sursa (job #2379853) | Cod sursa (job #1285250) | Cod sursa (job #2057502) | Cod sursa (job #2973876) | Cod sursa (job #199983)
Cod sursa(job #199983)
#define task "shop"
#define score 100
#include <stdio.h>
#include <stdlib.h>
#define fin "shop.in"
#define fout "shop.out"
#define N 32
long long a[N];
int b[N];
int n,c;
long long 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);
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;
cate[poz]=min(l/a[poz],b[poz]);
b[poz]-=cate[poz];
--poz;
l-=cate[poz+1]*a[poz+1];
}
}
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");
exit(0);
}
int main(void){
scan();
solve();
print();
}