Pagini recente » Monitorul de evaluare | Cod sursa (job #200164) | Cod sursa (job #1142408) | Cod sursa (job #810815) | Cod sursa (job #1023874)
#include <fstream>
#include <iomanip>
using namespace std;
ifstream f("dezastru.in");
ofstream g("dezastru.out");
int N,K;
double Probability=1;
int Fact=1;
double Array[30];
int x[30],counter=1,counter2;
double sum;
void Factorial()
{
int i=1;
for(i=1;i<=N;i++)
Fact*=i;
}
void Read()
{
int i;
f>>N>>K;
for(i=1;i<=N;i++)
f>>Array[i];
}
void solution()
{
int i;
double P=1;
for(i=1;i<=K;i++)
P*=Array[x[i]];
sum+=P;
}
void Number()
{
int i;
for(i=N;i>=N-K+1;i--)
counter*=i;
}
void back(int k)
{
int i;
for(i=x[k-1]+1;i<=N-K+k;i++)
{
x[k]=i;
if(k==K)
{
solution();
counter2++;
}
else
{
back(k+1);
}
}
}
int main()
{
Read();
Factorial();
Number();
back(1);
Probability=(sum*(counter/counter2))/(double)Fact;
g<<fixed<<setprecision(6)<<Probability<<"\n";
return 0;
}