Cod sursa(job #166593)

Utilizator c_e_manuEmanuel Cinca c_e_manu Data 28 martie 2008 09:36:03
Problema Dezastru Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream.h>
#include<iomanip.h>
void init(int k);
int suc(int k);
int valid(int k);
int sol(int k);
void afisare(int k);


int st[27],n,i,k,p,x;
float a[27],prob,solutie;

ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
int main()
{       int as,ev;st[0]=0;
	fin>>n>>p;
	for(i=1;i<=n;i++)
		fin>>a[i];
	k=1;
	init(k);
	while(k>0)
	{	do
		{	as=suc(k);
			if(as) ev=valid(k);
		}
		while(as&&!ev);
	if (as)
		if(sol(k))
			afisare(k);
			else
			{k++;init(k);}
	else k--;
	}
	fout<<setprecision(6)<<solutie/x;
	return 0;
}

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

int suc(int k)
{       if(st[k]<n&&k<=p) {if(k>2)st[k]=st[k-1]+1; else st[k]++;return 1;}
	return 0;
}
int valid(int k)
{	if(st[k-1]>=st[k]) return 0;
	return 1;
}
int sol(int k)
{       return (k==p);}
void afisare(int k)
{       prob=1;
	for(i=1;i<=p;i++)
	// 	fout<<st[i]<<' ';
	//fout<<'\n';
	prob*=a[st[i]];
	solutie+=2*prob;x+=2;
}