Cod sursa(job #256144)

Utilizator f.v.antonFlavius Anton f.v.anton Data 11 februarie 2009 11:34:16
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream.h>
#include <conio.h>
int x[27],n,p; long float y[50],prob[55]; int c=0;
long long int fact(int k)
{       long long kfact=1;
	for(int i=1;i<=k;i++)
		kfact*=i;
	return kfact;
}

valid(int t)
{
	for(int i=1;i<t;i++)
		if(x[t]<=x[i])
			return 0;
	return 1;
}
void rez()
{       long float sol=1;
	for(int i=1;i<=p;i++)
		sol*=prob[x[i]];
	y[++c]=sol;
}


void back(int k)
{
	for(int i=1;i<=n;i++)
	{	x[k]=i;

		if(valid(k))
			if(k==p)
			    rez();
			else
			   back(k+1);
	}
}

int main()
{
	fstream f("dezastru.in",ios::in), g("dezastru.out",ios::out);
	f>>n>>p;
	for(int i=1;i<=n;i++)
		f>>prob[i];

	back(1);
	long float sol=0;
	for(i=1;i<=c;i++)
		sol+=y[i]*fact(p)/fact(n);
	g<<sol;
	g.close();
	f.close();
	return 0;


}