Pagini recente » Cod sursa (job #2832740) | Cod sursa (job #1721340) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #109964)
Cod sursa(job #109964)
#include<stdio.h>
#include<math.h>
int n,c,v[31],poz[31],i;
long long l,minim,b[31],fol[31],var;
int divizare(int a,int x,int &m)
{long long aux; m=v[a];
while(a<x)
{while(v[a]>m) a++;
while(v[x]<m) x--;
if(a<x) {aux=v[a]; v[a]=v[x]; v[x]=aux;
aux=b[a]; b[a]=b[x]; b[x]=aux;}
aux=poz[a]; poz[a]=poz[x]; poz[x]=aux;}
m=a;
}
int Q_SORT(int a,int x)
{int m;
if(a<x) {divizare(a,x,m);
Q_SORT(a,m-1);
Q_SORT(m+1,x);} }
int main()
{freopen("shop.in","r",stdin);
freopen("shop.out","w",stdout);
scanf("%d%d%d",&n,&c,&l);
for(i=1;i<=n;i++) {scanf("%d%d",&v[i],&b[i]); poz[i]=i;}
Q_SORT(1,n);
for(i=1;i<=n;i++)
{if(l<=0) break;
var=l/pow(c,v[i]);
if(var<b[i]) {fol[i]=var; l-=pow(c,v[i])*var; minim+=var;}
else {fol[i]=b[i]; l-=pow(c,v[i])*b[i]; minim+=b[i];} }
printf("%lld\n",minim);
for(i=1;i<=n;i++)
{printf("%lld ",fol[poz[i]]);}
}