Cod sursa(job #1788293)

Utilizator MgMnPopescu Matei MgMn Data 25 octombrie 2016 21:20:19
Problema Dezastru Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>          //Enunt:
#include <iomanip>          //Avem n atacuri ce pot veni in orice ordine, fiecare cu o probabilitate de supravieturie
using namespace std;        //Calculam probabilitatea totala de supravietuire a primelor k cu 6 zecimale exacte

int a[26],b[26];
double v[26], sol, nr;   //v e vectorul probabilitatilor, gen

inline void combinari(int k,int n,int m, double p){

    int i;
    if(k-1 == m){
        sol=sol+p;
        ++nr;
     }
     else{
         for(i=1;i<=n; i++)
            if(!b[i] && a[k-1] < i){
                 a[k] = i;
                 b[i] = 1;
                 combinari(k+1,n,m,p*v[i]); //v[a[i]] => probabilitatea v a evenimentului a, inmultim fiecare combinatie de probabilitati
                 b[i] = 0;
           }
     }

}

int main()
{
    ifstream in("dezastru.in");
    ofstream out("dezastru.out");
    int j,n,m;
    in>>n>>m;
    for(j=1;j<=n;j++)
        in>>v[j];
    combinari(1,n,m,1);
    out<<setprecision(6)<<sol/nr;
    in.close();
    out.close();
    return 0;
}