Cod sursa(job #1821933)

Utilizator TincaMateiTinca Matei TincaMatei Data 3 decembrie 2016 21:59:42
Problema Dezastru Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>

long long factorial(int n) {
  long long rez;
  rez = 1LL;
  for(int i = 2; i <= n; ++i)
    rez = rez * i;
  return rez;
}

const int MAX_N = 25;
double rez, v[MAX_N];
int ramas[MAX_N];

inline void swap(int &a, int &b) {
  int aux;
  aux = a;
  a = b;
  b = aux;
}

void bkt(int i, int n, int k, double prod) {
  if(i == k)
    rez = rez + prod;
  else {
    for(int j = 0; j < n; ++j) {
      swap(ramas[j], ramas[n - 1]);
      bkt(i + 1, n - 1, k, prod * v[ramas[n - 1]]);
      swap(ramas[j], ramas[n - 1]);
    }
  }
}

int main() {
  int n, k;
  double comb;
  FILE *fin = fopen("dezastru.in", "r");
  fscanf(fin, "%d%d", &n, &k);
  for(int i = 0; i < n; ++i) {
    fscanf(fin, "%lf", &v[i]);
    ramas[i] = i;
  }
  fclose(fin);

  comb = factorial(n) / factorial(n - k);
  bkt(0, n, k, 1.0f / comb);

  FILE *fout = fopen("dezastru.out", "w");
  fprintf(fout, "%lf", rez);
  fclose(fout);
  return 0;
}