Cod sursa(job #1429810)

Utilizator hrazvanHarsan Razvan hrazvan Data 7 mai 2015 11:20:39
Problema Shop Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#define MAXN 30
int b[MAXN], point[MAXN];
long long a[MAXN];

inline int min2(int a, int b){
  return a < b ? a : b;
}

inline void srt(int n){
  int aux, i, j, min, p;
  for(i = 0; i < n; i++){
    p = i;
    min = a[point[i]];
    for(j = i + 1; j < n; j++){
      if(min > a[point[j]]){
        min = a[point[j]];
        p = j;
      }
    }
    aux = point[i];  point[i] = point[p];  point[p] = aux;
  }
}

int main(){
  FILE *in = fopen("shop.in", "r");
  int n, c, i;
  long long l;
  fscanf(in, "%d%d%lld", &n, &c, &l);
  for(i = 0; i < n; i++){
    fscanf(in, "%lld%d", &a[i], &b[i]);
    point[i] = i;
  }
  fclose(in);
  srt(n);
  int k = 0;
  long long x = 1;
  i = 0;
  for(k = 0; i < n; k++){
    while(i < n && a[point[i]] == k){
      a[point[i]] = x;
      i++;
    }
    x *= c;
  }
  int sum = 0;
  for(i = n - 1; i >= 0; i--){
    if(l > a[point[i]]){
      b[point[i]] = min2(b[point[i]], (int)(l / a[point[i]]));
      l -= a[point[i]] * b[point[i]];
      sum += b[point[i]];
    }
  }
  FILE *out = fopen("shop.out", "w");
  fprintf(out, "%d\n", sum);
  for(i = 0; i < n; i++)
    fprintf(out, "%d ", b[i]);
  fclose(out);
  return 0;
}