Pagini recente » Rating Naca Andrei Octavian (Naca_Andrei_325CB) | Cod sursa (job #907571) | Cod sursa (job #1738041) | Cod sursa (job #1559352) | Cod sursa (job #2307545)
#include <iostream>
#include <fstream>
using namespace std;
int rez[26];
double attack[26];
int n,k;
ofstream g("dezastru.out");
double probability;
void backtracking(int st)
{
if(st==k+1)
{
double pr=1;
for(int i=1;i<=k;i++)
pr*=attack[rez[i]];
probability+=pr;
}
else
{
int nr=n-rez[k]+1;
while(rez[k]<=n)
{
backtracking(st+1);
for(int i=st;i<=k;i++)
rez[i]++;
}
for(int i=st;i<=k;i++)
rez[i]-=nr;
}
}
long long combinari(int n,int k)
{
k=k>n-k? k : n-k;
int x,y;
x=y=1;
for(int i=k+1;i<=n;i++)
x*=i;
for(int i=2;i<=n-k;i++)
y*=i;
return x/y;
}
int main()
{
g.precision(6);
ifstream f("dezastru.in");
f>>n>>k;
for(int i=1;i<=k;i++)
rez[i]=i;
for(int i=1;i<=n;i++)
f>>attack[i];
backtracking(1);
g<<probability/combinari(n,k);
g.close();
return 0;
}