Cod sursa(job #1678944)

Utilizator horatiudumhoratiu horatiudum Data 7 aprilie 2016 16:34:39
Problema Dezastru Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 kb
#include<iostream>
#include<fstream>
using namespace std;

int N,K;
float numere[25];
int poz;
//stack<float> result;
float data[25];
float probab;
float prob1=1;
/*
int combinari(int n,int k)
{
    if (k==0) return 1;
    else if (k>n) return 0;
    else return (combinari(n-1,k)+combinari(n-1,k-1));
}
*/
/*
void combinationUtil(float numere[], float data[], int start, int end, int index, int k)
{
    if (index == k) {
        float prob=1;
        //cout << poz << ": ";
        for (int j=0; j<k; j++) {
          prob = prob*data[j];
          //cout << data[j] << " ";
        }
        poz++;
        probab=probab+prob;
        return;
    }
    for (int i=start; i<=end && end-i+1 >= k-index; i++)
    {
        data[index] = numere[i];
        combinationUtil(numere, data, i+1, end, index+1, k);
    }
}*/
/*
void combinationUtil(int start, int end, int index, int k)
{
    if (index == k) {
        //float prob=1;
        //cout << poz << ": ";
        //for (int j=0; j<k; j++) {
        //  prob = prob*data[j];
        //  cout << data[j] << " ";
        //}
        //cout << '\n';
        poz++;
        probab=probab+prob1;
        //prob1=1;
        return;
    }
    for (int i=start; i<=end && end-i+1 >= k-index; i++)
    {
        if(index==0) prob1=1;
        prob1 = prob1*numere[i];
        data[index] = numere[i];
        combinationUtil(i+1, end, index+1, k);
    }
}*/
void combinationUtil(float prob, int N, int k) {
  if (k == 0) {
    probab += prob;
    ++poz;
    return;
  }
  if (N == k) {
    for(int i = N-1; i >= 0; --i)
      prob *= numere[i];
    probab += prob;
    ++poz;
    return;
  }

  combinationUtil(prob, N-1, k);
  combinationUtil(prob*numere[N-1], N-1, k-1);
}
int main(){
    ifstream f("dezastru.in");
    ofstream out("dezastru.out");
    f>>N>>K;
    for (int i=0; i<N;i++) {
        f>>numere[i];
    }

    //combinationUtil(a, data, 0, N-1, 0, K);
    combinationUtil(1, N, K);
    out << (probab)/(float)(poz);
    return 0;
}