Cod sursa(job #819515)

Utilizator googolplexeGoogol googolplexe Data 19 noiembrie 2012 10:47:46
Problema Dezastru Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <iomanip>

using namespace std;

ifstream in("dezastru.in");
ofstream out("dezastru.out");

int attacks = 0, assaults = 0;
float chances[25] = {0.0f}, chanceToSurvive = 0.0f;
int permutation[25] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
float factorial = 0.0f;

void bt(int position,float sum)
{
	if(position == assaults)
	{
		chanceToSurvive += sum;
		factorial++;
	}
	else
	{
		for(int attack = 0; attack < attacks; attack++)
		{
			int ok = 1 ;
			for(int i=0 ; i < attacks; i++)
			{
				if(permutation[i]==attack)
				{
					ok=0;
					break;
				}
			}
			if(ok)
			{
				permutation[position] = attack;
				bt( position+1 ,sum*chances[attack]);
				permutation[position] = -1;
			}
		}
	}
}

int main()
{
	in >> attacks >> assaults;
	for(int i = 0; i < attacks; i++)
		in >> chances[i];
	in.close();
	bt(0,1.0f);
	out << setprecision(6)<< chanceToSurvive/factorial;
	out.close();
	return 0;
}