Cod sursa(job #45855)

Utilizator mika17Mihai Alex Ionescu mika17 Data 1 aprilie 2007 23:40:55
Problema Shop Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#define fin "shop.in"
#define fout "shop.out"
#define DMAX 33
long long L,pow[DMAX];
int C,T,N,s[DMAX],b[DMAX],ord[DMAX];
void readData()
{
 int x,v;
 FILE * f = fopen(fin,"r");
 fscanf(f,"%d %d %Ld",&N,&C,&L);
 for(int i = 0 ; i<N ; ++i)
    {
     fscanf(f,"%d %d",&x,&v);
     b[x] = v;
     ord[i] = x;
    }
 fclose(f);
}

void exp()
{
 int i;
 pow[0] = 1;
 for(i=1;pow[i-1]*C<=L & i<DMAX;++i)
    pow[i] = pow[i-1] * C;
 T = i - 1;
}

inline long long min(long long x,long long y)
{
 return x<y?x:y;
}

void solve()
{
 int minn;
 long long r = 0;
 FILE * f = fopen(fout,"w");
 for(int i = T , minn ; i>=0; --i)
 if(b[i])
   {
    L-=pow[i]*(minn = min(L/pow[i],b[i]));
    r += s[i] = minn;
   }
 fprintf(f,"%Ld\n",r);
 for(int i = 0 ; i < N ; ++i)
      fprintf(f,"%d ",s[ord[i]]);
 fclose(f);
}

int main()
{
 readData();
 exp();
 solve();
 return 0;
}