Mai intai trebuie sa te autentifici.
Cod sursa(job #1283001)
Utilizator | Data | 4 decembrie 2014 22:47:54 | |
---|---|---|---|
Problema | Dezastru | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.92 kb |
#include <cstdio>
using namespace std;
int st[30],n,k,p;
float s,b[30];
void abc()
{
float w=1;
for(int i=1;i<=k;i++)w*=b[st[i]];
s+=(2.0*w)/float(p);
}
void back(int x)
{
if(x>k)abc();
else for(int i=x;i<=n;i++)
{
st[x]=i;
if(st[x]>st[x-1])
back(x+1);
}
}
unsigned long long comb(int n,int k)
{
unsigned long long n2,nf,ns,j;
n2=n-k;
nf=ns=1;
if(n==k)
return 1;
else
{
if(n2>=k)
{
for(j=n2+1;j<=n;j++)
nf=nf*j;
for(j=2;j<=k;j++)
ns=ns*j;
return (nf/ns)%30103;
}
else
{
for(j=k+1;j<=n;j++)
nf=nf*j;
for(j=2;j<=n2;j++)
ns=ns*j;
return (nf/ns)%30103;
}
}
}
int main()
{
freopen("dezastru.in","r",stdin);
freopen("dezastru.out","w",stdout);
scanf("%d%d",&n,&k);
p=2*1LL*comb(n,k);
for(int i=1;i<=n;i++)scanf("%f",&b[i]);
back(1);
printf("%.6f",s);
return 0;
}