Cod sursa(job #63150)

Utilizator crawlerPuni Andrei Paul crawler Data 27 mai 2007 00:26:38
Problema Shop Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>

using namespace std;

long long put[33];
int a[33], b[33];
int use[33];
int val[33];


int main()
 {
  freopen("shop.in","r",stdin);
  freopen("shop.out","w",stdout);

  int n,i,j, nrmin = 0, aux;
  long long c,L;

  scanf("%d%lld%lld",&n,&c,&L);

  put[0] = 1;
  for(i=1;put[i]<L;++i)
   put[i] = put[i-1] * c;


  for(i=1;i<=n;++i)
   {
    scanf("%d%d",&a[i],&b[i]);
//    printf("%d %d\n",a[i],b[i]);
    val[a[i]] = i;
  }

  for(i=1;i<n;++i)
   for(j=i+1;j<=n;++j)
    if(a[i] < a[j])
     {
      aux = a[i];
      a[i] = a[j];
      a[j] = aux;

      aux = b[i];
      b[i] = b[j];
      b[j] = aux;
     }
/*
  for(i=1;i<=n;++i)
   printf("%d ",a[i]);
  printf("\n");
*/

  for(i=1;i<=n;++i)
   {
    j = 0;
    while((j <= b[i]) && (L - put[a[i]]*j >= 0))
     ++j;
    --j;

    use[val[a[i]]] = j;
    L -= put[a[i]]*j;
    nrmin += j;
//    printf("+ %lld\n",put[a[i]]*j);

   }


  printf("%d\n",nrmin);
  for(i=1;i<=n;++i)
   printf("%d ",use[i]);
  printf("\n");


  return 0;
 }