Cod sursa(job #1805220)

Utilizator BogdanIonesqBogdan Ionescu BogdanIonesq Data 13 noiembrie 2016 15:53:25
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <iomanip>

using namespace std;

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

int n, k,i, niv, nrsol=1, aranjamente=1;
double prob[30], prod, probfinal;
int sol[30];

void back(int niv)
{
     if (niv == k+1)
     {
     /*
          for (i=1; i <= k; i++)
          {
               out << sol[i] << ' ';
          }
          out << '\n';
*/
          prod=1;
          for (i=1; i <= k ; i++)
          {
               prod=prod*prob[sol[i]];
          }
          probfinal = probfinal + prod/nrsol;
        }
     else
     {
          if (niv > 1) sol[niv]=sol[niv-1];
          else sol[niv]=0;

          while (sol[niv] < n-k+niv)
          {
                sol[niv]++;
                back(niv+1);
          }
     }
}

int main()
{
     in >> n >> k;
     for(i=1; i <= n; i++)
     {
          in >> prob[i];
     }

     for(i=1; i <= n; i++)
     {
          nrsol=nrsol*i;
     }

     back(1);

     for (i=n; i>= n-k+1; i--)
     {
        aranjamente=aranjamente*i;
     }

     out << setprecision(6);
     out << (aranjamente/n)*probfinal;

     return 0;
}