Cod sursa(job #1805176)

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

using namespace std;

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

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

/*
int valid(int niv)
{
     for (int i=1; i <niv; i++)
     {
          if ( sol[i] == sol[niv]) return false;
     }

     return true;
}
*/

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 + rep*(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;
     }
     rep=nrsol/n;
     back(1);

     out << setprecision(6);
     out << probfinal;

     return 0;
}