Cod sursa(job #954716)

Utilizator superman_01Avramescu Cristian superman_01 Data 29 mai 2013 21:46:27
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 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;
    
}
*/