Cod sursa(job #961109)

Utilizator primulDarie Sergiu primul Data 11 iunie 2013 17:11:42
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include<fstream>
#include<iomanip>
 
#define NMAX 30
 
using namespace std;
 
ifstream f("dezastru.in");
ofstream g("dezastru.out");
 
double v[NMAX];
int N,K;
double DP[NMAX][NMAX];
long double nr_comb;
double Answer;
void Dynamics( void )
{
    DP[0][0]=1;
    for(int i(1) ; i <= N ; ++i )
    {
        DP[i][0]=1;
        for(int ii(1) ;ii <= i ; ++ii )
            DP[i][ii]=DP[i-1][ii-1]*v[i]+DP[i-1][ii];
    }  
}
long double Solve( int number )
{
    long double res(1);
    for(int i(1) ; i <= number ; ++i )
        res*=i;
    return res;
}
 
void Write ( void )
{
    nr_comb=Solve(N)/(Solve(N-K)*Solve( K));
    Answer=DP[N][K];
   g<<setprecision(6)<<Answer/nr_comb<<"\n";
   exit(0);
}
int main ( void )
{
    f>>N>>K;
     
     
   for( int i(1) ; i <= N ; ++i )
       f>>v[i];
   Dynamics();
   Write();
   return 0;
     
}
/*
#include<fstream>
#include<iomanip>
 
#define NMAX 30
 
using namespace std;
 
ifstream f("dezastru.in");
ofstream g("dezastru.out");
 
int N,K;
 
double v[NMAX],prod;
double sum,Answer;
 
int s[NMAX],nr;
 
void Backtracking( int k )
{
    if( k== K +1 )
    {
        sum+=prod;
        ++nr;
        return ;
    }
    else
        for(int i(s[k-1] +1 ) ; i <= N ; ++ i)
        {
            s[k]=i;
            prod*=v[i];
            Backtracking(k+1);
            prod/=v[i];
             
        }
     
     
}
void Write ( void )
{
   Answer=sum/nr;
   g<<setprecision(6)<<Answer<<"\n";
   exit(0);
}
int main ( void )
{
    f>>N>>K;
    prod=1;
     
   for( int i(1) ; i <= N ; ++i )
       f>>v[i];
   Backtracking(1);
   Write();
   return 0;
     
}
*/