Cod sursa(job #2004320)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 25 iulie 2017 16:31:20
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, m;
double val[26];
int st[26], nrDez;
bool viz[26];
double dez[26];
double fact = 1;

void factorial(){
  for(int i = m + 1; i <= n; i++)
    fact *= i;
}

void citire(){
  in >> n >> m;
  for(int i = 1; i <= n; i++){
    in >> val[i];
    dez[i] = 1;
  }
  factorial();
}

void bkt(int k){
  for(int i = st[k-1] + 1; i <= n; i++)
    if(viz[i] == false){
      st[k] = i;
      viz[i] = true;
      if(k == m){
        nrDez++;
        for(int j = 1; j <= m; j++){
          dez[nrDez] *= val[st[j]];
        }
        dez[nrDez] = (float) (dez[nrDez] / fact);
      }else
        bkt(k + 1);
      viz[i] = false;
    }
}

void rezolvare(){
  double raspuns = 0;
  for(int i = 1; i <= nrDez; i++){
    raspuns += dez[i];
  }
  out << raspuns;
}

int main(){
  citire();
  st[0] = 0;
  bkt(1);
  rezolvare();
  return 0;
}