Cod sursa(job #538717)

Utilizator AnkutzaAnca Ioana Ankutza Data 21 februarie 2011 20:52:19
Problema Dezastru Scor 0
Compilator cpp Status done
Runda contest- Marime 1.36 kb
#include<iostream>
#include<fstream.h>
#include <iomanip.h>
ifstream f("dezastru.in");
ofstream g("dezastru.out");
using namespace std;
int st[100],n,k;
long fact_k=1;
double info=1,total_probabil=0;
double a[100];
int valid(int p)
{
    int i;
      for(i=1;i<p;i++)
        if(st[i]==st[p])return 0;
         return 1;
}    
void prod()
{
int i;

info=1;
for(i=1;i<=k;i++)
info=info*a[st[i]];

total_probabil=total_probabil+info;
/*
cout<<info<<" ";
system("pause");*/
}
//void afisare(){int i;for(i=1;i<=k;i++) g<<st[i]; g<<endl;}
void back(int p)
{int pval;
     
          for(pval=st[p-1]+1;pval<=n;pval++)
          {st[p]=pval;
          
          if(valid(p))
          if(p==k)
       prod();
          else
          back(p+1);
          }
          }
        
        
          int main()
          {int i,j;
              f>>n>>k;
              
          
         for(i=1;i<=n;i++)
        f>>a[i];
         
   for(i=k+1;i<=n;i++)
     fact_k=fact_k*i;

//pt fiecare combinare k elem   k! posibilitati de atac
//      soltuia finala=   posibiliati/(k+1)*(k+2)*..n
// ar fi trebuit   posibilitati*k!/n!

     
          back(1);
          g<<setiosflags(ios::showpoint)<<setprecision(6)<<(double)total_probabil/fact_k;
          f.close();
          g.close();
      
              return 0;
          }