Pagini recente » Cod sursa (job #2400121) | Cod sursa (job #1125198) | Cod sursa (job #160404) | Cod sursa (job #1608685) | Cod sursa (job #1678678)
#include<iostream>
#include<fstream>
#include<vector>
#include <stack>
using namespace std;
int N,K;
float a[25];
int poz;
stack<float> result;
float data[25];
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(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];
}
/*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.top()/(float)(resultSize*K);
result.pop();
}
//cout << probab*K;
out << probab*K;
return 0;
}