Cod sursa(job #642821)

Utilizator noobakafloFlorin eu noobakaflo Data 2 decembrie 2011 12:49:02
Problema Dezastru Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<iostream>
#include<fstream>
using namespace std;
fstream f("dezastru.in",ios::in);
fstream g("dezastru.out",ios::out);

int n,r,st[100];
float p[100],prob=0,fact=1;

void tipar()
{
	int i;
	float produs=1;
	
	for(i=0; i<r; i++)
		produs*=p[st[i]];
	prob+=produs/fact;

}

void init(int k)
{
	st[k]=-1;
}

int succesor(int k)
{
	if(st[k]<n-1)
	{
		st[k]++;
		return 1;
	}
	else
		return 0;
}

int valid(int k)
{
	int i;
	for(i=0; i<k; i++)
		if(st[i]==st[k])
			return 0;
	return 1;
}

void back(int k)
{
	if(k==n)
		tipar();
	else
	{
		init(k);
		while(succesor(k))
			if(valid(k))
				back(k+1);
	}
}

int main()
{
	int i;
	
	f>>n>>r;
	for(i=0; i<n; i++)
		f>>p[i];
	
	for(i=1; i<=n; i++)
		fact*=i;
	back(0);
	g<<prob;
	
	f.close(); g.close();
	return 0;
}