Cod sursa(job #110000)

Utilizator pandaemonAndrei Popescu pandaemon Data 25 noiembrie 2007 15:34:46
Problema Shop Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 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%lld",&n,&c,&l);
 for(i=1;i<=n;i++) {scanf("%d%lld",&v[i],&b[i]); poz[i]=i;}

 Q_SORT(1,n);

 for(i=1;i<=n;i++)
 {if(l<=0) break;
 while(l-pow(c,v[i])>=0 && b[i]>0)
  {b[i]--; fol[i]++; l-=pow(c,v[i]); minim++;} }

  printf("%lld\n",minim);

  for(i=1;i<=n;i++)
  {printf("%lld ",fol[poz[i]]);}



}