Cod sursa(job #2727649)

Utilizator PetyAlexandru Peticaru Pety Data 22 martie 2021 11:40:26
Problema Dezastru Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>
#define ll long long
#define ld long double

using namespace std;

ifstream fin ("dezastru.in");
ofstream fout ("dezastru.out");

int n, k, viz[26], a[26];
double prob[26], ans, aux;

void backt (int p) {
  if (p ==k + 1) {
    double prod = 1.0;
    for (int i = 1; i <= k; i++) {
      prod = 1.0 * prod * prob[a[i]];
    }
    ans += prod * aux;
    return;
  }
  for (int i  = a[p - 1] + 1; i <= n; i++)
    if (!viz[i]) {
      viz[i] = 1;
      a[p] = i;
      backt(p + 1);
      viz[i] = 0;
    }
}

int main()
{
  fin >> n >> k;
  aux = 1;
  for (int i = 1; i <= k; i++)
    aux *= i;
  for (int i = n - k + 1; i <= n;i++)
    aux = 1.0 * aux / i;
  for (int i = 1; i <= n; i++)
    fin >> prob[i];
  backt(1);
  fout<< fixed << setprecision(9) << ans << "\n";
  return 0;
}