Cod sursa(job #37505)
#include<fstream.h>
#include<iomanip.h>
#include<math.h>
ifstream f("dezastru.in");
ofstream g("dezastru.out");
int st[30],valmin,valmax,n,nivel,i,k;
float v[30],fact,p,pr=0;
void init(){
st[nivel]=valmin-1;}
int succ(){
if (st[nivel]<valmax) {st[nivel]++; return 1;}
return 0;}
int valid(){
for(i=0;i<nivel;i++)
if(st[i]==st[nivel]) return 0;
return 1;}
int solutie(){
return(nivel==n);}
void tipar(){
int i;p=1;
for (i=1; i<=k; i++) p=v[st[i]]*p;
pr=pr+p;}
int main(){
int as,ev;
// cout<<"n=";cin>>n;
// cout<<"k=";cin>>k;
f>>n;f>>k;
for(i=1; i<=n; i++) f>>v[i];
valmin=1;
valmax=n;fact=1;
for(i=1;i<=n;i++)fact=fact*i;
// n=k;
nivel=1; init();
while (nivel>0){
do{as=succ();
if(as) ev=valid();}while(as&&!ev);
if(as)
if(solutie()) tipar(); else{nivel++; init();} else nivel--;
}
pr=pr/fact;
g<<setprecision(6)<<pr<<endl;
return 0;}