Cod sursa(job #2705655)
Utilizator | Data | 13 februarie 2021 09:31:51 | |
---|---|---|---|
Problema | Dezastru | Scor | 90 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.54 kb |
#include <fstream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
ifstream be("dezastru.in");
ofstream ki("dezastru.out");
int a[20],n,k;
double pkedv=0,x[26],prodall;
bool fordit;
void bt(int j,double prod)
{
if(j==k)
{
if(fordit){
int idx=0;
double akt=1;
for(int i=0;i<k;i++)
{
while(idx<a[i]){
akt*=x[idx];
idx++;
}
idx++;
}
while(idx<n){
akt*=x[idx];
idx++;
}
pkedv+=akt;
}
else
pkedv+=prod;
}
else {
int start= j==0 ? 0: a[j-1]+1;
for(int i=start;i<n;i++)
{
a[j]=i;
bt(j+1,prod*x[i]);
}
}
}
int main()
{
be>>n>>k;
prodall=1;
for(int i=0;i<n;i++){
be>>x[i];
prodall*=x[i];
}
double eh;
if(k<n-k)
{
fordit=false;
eh=1;
for(int i=1;i<=k;i++)
eh*=i;
for(int i=n-k+1;i<=n;i++)
eh/=i;
}
else
{
fordit=true;
eh=1;
k=n-k;
for(int i=1;i<=n-k;i++)
eh*=i;
for(int i=k+1;i<=n;i++)
eh/=i;
}
bt(0,1);
ki<<setprecision(8)<<pkedv*eh<<endl;
return 0;
}