Cod sursa(job #109964)

Utilizator pandaemonAndrei Popescu pandaemon Data 25 noiembrie 2007 14:47:00
Problema Shop Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#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]]);}



}