Cod sursa(job #1678616)

Utilizator horatiudumhoratiu horatiudum Data 7 aprilie 2016 14:23:22
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

int N,K;
float a[25];
int poz;
vector<float> result;
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++;
        result.push_back(prob);
        //cout << prob << "\n";

        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);
    }
}

int main(){
    ifstream f("dezastru.in");
    ofstream out("dezastru.out");
    f>>N>>K;
    for (int i=0; i<N;i++) {
        f>>a[i];
    }
    float data[K];
    for (int i=0; i<K;i++) {
        data[i]=0;
    }

    combinationUtil(a, data, 0, N-1, 0, K);

    int resultSize=result.size();
    float probab=0;
    //cout << result.at(0) << " " << (float)(resultSize+K) << " " << result.at(0)/(float)(resultSize*K) << "\n";

    for (int i=0; i<resultSize;i++) {
        probab=probab+result.at(i)/(float)(resultSize*K);
    }
    //cout << probab*K;
    out << probab*K;
    return 0;
}