#include <iostream>
#include<bits/stdc++.h>
using namespace std;
void makeCombiUtil(vector<vector<int> >& ans,
vector<int>& tmp, int n, int left, int k)
{
// Pushing this vector to a vector of vector
if (k == 0) {
ans.push_back(tmp);
return;
}
// i iterates from left to n. First time
// left will be 1
for (int i = left; i <= n; ++i)
{
tmp.push_back(i);
makeCombiUtil(ans, tmp, n, i + 1, k - 1);
// Popping out last inserted element
// from the vector
tmp.pop_back();
}
}
vector<vector<int> > makeCombi(int n, int k)
{
vector<vector<int> > ans;
vector<int> tmp;
makeCombiUtil(ans, tmp, n, 1, k);
return ans;
}
double getVal(vector<vector<int>>& combi,vector<double>& prob)
{
double sol = 0.0;
for(int i = 0 ; i < int(combi.size()) ; i++)
{
vector<int> tempV = combi[i];
double temp = 1.0;
int indx = 0;
for(int j = 0 ; j < int(prob.size()) ; j++)
{
if(j == tempV[indx]-1){
temp*=prob[j];
indx++;
}
else
{
temp*=(1-prob[j]);
}
}
sol+=temp;
}
return sol;
}
int main() {
// your code goes here
vector<int>temp;
vector<vector<int>>combi;
cout<<"jere"<<endl;
int k = 2;
int n = 3;
vector<vector<int> > an = makeCombi(n, k);
for(int i = 0 ; i < an.size() ; i++)
{
for(int j = 0 ; j < an[0].size() ; j++)
{
cout<<an[i][j]<<" : ";
}
cout<<endl;
}
vector<double> prob = {0.4,0.6,0.8};
double sol = getVal(an,prob);
cout<<sol<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2b2lkIG1ha2VDb21iaVV0aWwodmVjdG9yPHZlY3RvcjxpbnQ+ID4mIGFucywgCiAgICB2ZWN0b3I8aW50PiYgdG1wLCBpbnQgbiwgaW50IGxlZnQsIGludCBrKSAKeyAKICAgIC8vIFB1c2hpbmcgdGhpcyB2ZWN0b3IgdG8gYSB2ZWN0b3Igb2YgdmVjdG9yIAogICAgaWYgKGsgPT0gMCkgeyAKICAgICAgICBhbnMucHVzaF9iYWNrKHRtcCk7IAogICAgICAgIHJldHVybjsgCiAgICB9IAogIAogICAgLy8gaSBpdGVyYXRlcyBmcm9tIGxlZnQgdG8gbi4gRmlyc3QgdGltZSAKICAgIC8vIGxlZnQgd2lsbCBiZSAxIAogICAgZm9yIChpbnQgaSA9IGxlZnQ7IGkgPD0gbjsgKytpKSAKICAgIHsgCiAgICAgICAgdG1wLnB1c2hfYmFjayhpKTsgCiAgICAgICAgbWFrZUNvbWJpVXRpbChhbnMsIHRtcCwgbiwgaSArIDEsIGsgLSAxKTsgCiAgCiAgICAgICAgLy8gUG9wcGluZyBvdXQgbGFzdCBpbnNlcnRlZCBlbGVtZW50IAogICAgICAgIC8vIGZyb20gdGhlIHZlY3RvciAKICAgICAgICB0bXAucG9wX2JhY2soKTsgCiAgICB9IAp9IAp2ZWN0b3I8dmVjdG9yPGludD4gPiBtYWtlQ29tYmkoaW50IG4sIGludCBrKSAKeyAKICAgIHZlY3Rvcjx2ZWN0b3I8aW50PiA+IGFuczsgCiAgICB2ZWN0b3I8aW50PiB0bXA7IAogICAgbWFrZUNvbWJpVXRpbChhbnMsIHRtcCwgbiwgMSwgayk7IAogICAgcmV0dXJuIGFuczsgCn0gCiAgIGRvdWJsZSBnZXRWYWwodmVjdG9yPHZlY3RvcjxpbnQ+PiYgY29tYmksdmVjdG9yPGRvdWJsZT4mIHByb2IpCiAgICB7CiAgICAgICAgZG91YmxlIHNvbCA9IDAuMDsKICAgICAgICAKICAgICAgICBmb3IoaW50IGkgPSAwIDsgaSA8IGludChjb21iaS5zaXplKCkpIDsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgCiAgICAgICAgICAgdmVjdG9yPGludD4gdGVtcFYgPSBjb21iaVtpXTsKICAgICAgICAgICAgZG91YmxlIHRlbXAgPSAxLjA7CiAgICAgICAgICAgIGludCBpbmR4ID0gMDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvcihpbnQgaiA9IDAgOyBqIDwgaW50KHByb2Iuc2l6ZSgpKSA7IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoaiA9PSB0ZW1wVltpbmR4XS0xKXsKICAgICAgICAgICAgICAgIHRlbXAqPXByb2Jbal07CiAgICAgICAgICAgICAgICBpbmR4Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdGVtcCo9KDEtcHJvYltqXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc29sKz10ZW1wOwogICAgICAgIH0gICAKICAgICAgICByZXR1cm4gc29sOwogICAgfQppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCSAgICAgICAgdmVjdG9yPGludD50ZW1wOwogICAgICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj5jb21iaTsKICAgICAgICBjb3V0PDwiamVyZSI8PGVuZGw7CiAKICAgICAgICBpbnQgayA9IDI7CiAgICAgICAgaW50IG4gPSAzOwogICAgICAgIHZlY3Rvcjx2ZWN0b3I8aW50PiA+IGFuID0gbWFrZUNvbWJpKG4sIGspOyAKICAgICAgICBmb3IoaW50IGkgPSAwIDsgaSA8IGFuLnNpemUoKSA7IGkrKykKICAgICAgICB7CiAgICAgICAgCWZvcihpbnQgaiA9IDAgOyBqIDwgYW5bMF0uc2l6ZSgpIDsgaisrKQogICAgICAgIAl7CiAgICAgICAgCQljb3V0PDxhbltpXVtqXTw8IiA6ICAiOwogICAgICAgIAl9CiAgICAgICAgCWNvdXQ8PGVuZGw7CiAgICAgICAgfQogICAgICAgIHZlY3Rvcjxkb3VibGU+IHByb2IgPSB7MC40LDAuNiwwLjh9OwogICAgICAgIGRvdWJsZSBzb2wgPSAgZ2V0VmFsKGFuLHByb2IpOwoJCWNvdXQ8PHNvbDw8ZW5kbDsKCXJldHVybiAwOwp9