Cod sursa(job #66352)

Utilizator floringh06Florin Ghesu floringh06 Data 17 iunie 2007 20:55:44
Problema Shop Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
using namespace std;

#define MAX_N 35
#define min(a,b) ((a)<(b)?(a):(b))

#define ll long long
#include <stdio.h>

typedef struct {
  int vl;
  int n;
  int p;
} Coin;

int n,c;
ll L,ct;
Coin a[MAX_N];
ll sol[MAX_N];

FILE *fin=fopen("shop.in","r"),
     *fout=fopen("shop.out","w");
 
int power(int a, int b)
{ int i,c=a; 
  if (b==0) return 1;
  for (i=2; i<=b; i++) a*=c; 
  return a; } 
 
int main()
{
    fscanf(fin,"%d %d %lld",&n,&c,&L);
    int i,j;
    for (i=1; i<=n; i++) {
     fscanf(fin,"%d %d\n",&a[i].vl,&a[i].n);       
     a[i].p=i;
    }
    Coin aux;
    for (i=1; i<=n-1; i++)
     for (j=i+1; j<=n; j++)
      if (a[i].vl<a[j].vl)
       { aux=a[i]; a[i]=a[j]; a[j]=aux; }   
    int v;   
    for (i=1; i<=n; i++)
     {
       v=min(L/power(c,a[i].vl),a[i].n);
       sol[a[i].p]+=v;
       L-=v*power(c,a[i].vl);
       ct+=v;
       if (L==0) break; 
     }
    fprintf(fout,"%lld\n",ct);
    for (i=1; i<=n; i++)
     fprintf(fout,"%lld ",sol[i]);
    
    fclose(fin);
    fclose(fout);
    
    return 0;
}