Cod sursa(job #180997)

Utilizator xtremespeedzeal xtreme Data 17 aprilie 2008 19:02:10
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<stdlib.h>

int as,ev,st[26],k,n,i;

int succesor()
	{
	as=0;
	if(st[k]<n)
		{
		as=1;
		st[k]++;
		}
	return as;
	}
void valid()
	{
	ev=1;
	for(i=1;i<=k-1;i++)
		if(st[i]==st[k])
			{
			ev=0;
			break;
			}
	}
int main()
	{
	fstream f("dezastru.in",ios::in),g("dezastru.out",ios::out);
	int h,pb[26],fact=1,inmul;double r=0; 
	f>>n>>h;
	for(i=1;i<=n;i++)
		f>>pb[i];
	k=1;
	st[k]=0;
	while(k>0)
		{
		do
			{
			if(succesor())
				valid();
			}
		while(as && !ev);
		if(as)
			{
			if(k==h)
				{
				fact++;
				inmul=1;
				for(i=1;i<=h;i++)
					inmul*=pb[st[i]];
				r+=inmul;
				}
			else
				{
				k++;
				st[k]=0;
				}
			}
		else
			k--;
		}
	g<<precision(6)<<(r/fact);
	f.close();g.close();
	}