Cod sursa(job #2727645)

Utilizator PetyAlexandru Peticaru Pety Data 22 martie 2021 11:37:41
Problema Dezastru Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.74 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;

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]];
      prod *= i;
    }
    for (int i = n - k + 1; i <= n; i++)
      prod /= i;
    ans += prod;
    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;
  for (int i = 1; i <= n; i++)
    fin >> prob[i];
  backt(1);
  fout<< fixed << setprecision(9) << ans << "\n";
  return 0;
}