Cod sursa(job #654305)

Utilizator daniel.dumitranDaniel Dumitran daniel.dumitran Data 30 decembrie 2011 02:34:43
Problema Numere 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#include <queue>

#define FISIN   "numar2.in"
#define FISOUT  "numar2.out"

#define MAXN 100

struct Multiple {
  long long prod;
  int fact;

  bool operator<(const Multiple& m) const { return prod > m.prod; }
  Multiple(long long p, int f) : prod(p), fact(f) { }
};

int a[MAXN];
int n, m;

int main() {
  FILE *fin = fopen(FISIN, "rt");
  FILE *fout = fopen(FISOUT, "wt");

  std::priority_queue<Multiple> heap;

  fscanf(fin, "%d %d", &n, &m);
  for (int i = 0; i < n; ++i) {
    fscanf(fin, "%d", a + i);
    heap.push(Multiple(a[i], a[i]));
  }

  long long last_popped = -1;
  for (int i = 1; i <= m; ++i) {
    Multiple m = heap.top();
    heap.pop();

    if (m.prod == last_popped) --i;
    last_popped = m.prod;

    heap.push(Multiple(last_popped + m.fact, m.fact));
  }

  fprintf(fout, "%lld\n", last_popped);

  fclose(fout);
  fclose(fin);
  return 0;
}