Cod sursa(job #46134)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 2 aprilie 2007 13:02:56
Problema Shop Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <stdlib.h>

    long N,C,i,j,ind[34],A[34],B[34];
    long long L,p[34],min,u[34],s;

int comp(const void* n1,const void* n2){
    return A[*((long*)n1)]-A[*((long*)n2)];
}

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 %d",&A[i],&B[i]);
    A[0]=-1;
    p[0]=1;i=1;
    while (((long long)1<<62)/p[i-1]>=C){
          p[i]=(long long)p[i-1]*C;
          //printf("%I64d\n",p[i]);
          i++;
    }
    
    for (i=0;i<=N;i++)ind[i]=i;
    qsort(ind,N+1,sizeof(int),comp);
    i=N;
    //for (i=1;i<=N;i++)printf("%d\n",B[i]);
    s=0;
    while (L&&i){
          if (p[A[ind[i]]])min=L/p[A[ind[i]]];
          if (B[ind[i]]<min)min=B[ind[i]];
          u[ind[i]]=min;
          s+=min;
          L=(long long)L-min*p[A[ind[i]]];
          i--;
    }
    printf("%lld\n",s);
    for (i=1;i<=N;i++)printf("%lld ",u[i]);
    //printf("%I64d",min);
    printf("\n");
    return 0;
}