Pagini recente » Cod sursa (job #3259358) | Cod sursa (job #2304813) | Cod sursa (job #1249273) | Cod sursa (job #769553) | Cod sursa (job #2507059)
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int N, K;
float p[30];
float P[30], rez = 0, Pt=1;
bool viz[30];
int ct;
void Back(int top, bool mode) {
if (top == K + 1) {
if(mode==0) {
rez += P[top-1];
ct++;
}
else {
rez += Pt/P[top-1];
ct++;
}
// cout << P << "\n";
} else
for (int i = 1; i <= N; i++) {
if (viz[i] == 0) {
viz[i] = true;
P[top]= p[i]*P[top-1];
Back(top + 1,mode);
viz[i] = false;
}
}
}
int main() {
ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
fin >> N >> K;
for (int i = 1; i <= N; i++) {
fin >> p[i];
Pt*=p[i];
}
P[0]=1;
if (K <= N / 2) {
Back(1, false);
fout << fixed << setprecision(6) << rez / (float) ct;
}
else {
K=N-K;
Back(1,true);
fout << fixed << setprecision(6) <<rez / (float) ct;
}
}