Cod sursa(job #55236)

Utilizator anoukAnca Dumitrache anouk Data 26 aprilie 2007 20:34:35
Problema Shop Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iostream>
#define DIM 31
using namespace std;

long long int L, N, C;
struct Moneda {
       int a, b, poz;
};
vector <Moneda> A;
int nrm[DIM];
int sol;

bool cmp(Moneda X, Moneda Y)
{
     return X.a > Y.a;
}

int main()
{
    FILE *fin = fopen("shop.in", "r");
    FILE *fout = fopen("shop.out", "w");
    
    fscanf(fin, "%d%d%d", &N, &C, &L);
    A.resize(N+1);
    int i, x, y;
    for (i = 0; i < N; i++)
    {
        fscanf(fin, "%d%d", &x, &y);
        A[i].a = x;
        A[i].b = y;
        A[i].poz = i;
    }
    
    sort(A.begin(), A.end(), cmp);
    i = 0;
    while (L && i < N)
    {
          int x;
          if (L / pow((double)C, (double)A[i].a) > A[i].b)
          {
             nrm[A[i].poz] = A[i].b;
             sol += A[i].b;
             L -= A[i].b * pow((double)C, (double)A[i].a);
          }
          else if (L / pow((double)C, (double)A[i].a))
          {
             nrm[A[i].poz] = L / pow((double)C, (double)A[i].a);
             L -= nrm[A[i].poz] * pow((double)C, (double)A[i].a);
             sol += nrm[A[i].poz];
          }
          i++;
    }
    
    fprintf(fout, "%d\n", sol);
    for (int i = 0; i < N; i++)
        fprintf(fout, "%d ", nrm[i]);
    
    fclose(fin);
    fclose(fout);
    return 0;
}