Cod sursa(job #273198)

Utilizator catalin93Catalin Ionescu catalin93 Data 8 martie 2009 12:26:16
Problema Dezastru Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>

short int v[30];
double suma, prob[30];
double p;
short int n,k;
/*
int exista( int t)
{
	if  (v[t]<n) 
		return 1;
	return 0;
}*/

inline int cond( int t)
{
	int i;	
	for(i=0;i<t;i++)
		if(v[i]>=v[t])		//verificam sa fie diferit si sa fie mai mare ca sa fie unica solutia
			return 0;
	return 1;
}
/*
int solutie( int t)
{
	if(t==k)
		return 1;
	return 0;
}*/
/*
void afisare(int t)
{
	int i;
	double temp;
	temp =1;
	for(i=0;i<t;++i)
				temp*=prob[v[i]];
	suma+=temp;
		++p;
}*/

void bkt(int t)
{
int i;
      if(t == k)
	  {
		int i;
	double temp;
	temp =1;
	for(i=0;i<t;++i)
				temp*=prob[v[i]];
	suma+=temp;
		++p;
	  }
      else
  
      for(i=0;i<n;i++)	//for de la prima valoare valida la ultima valoare valida
  {
      v[t] = i;		//aici dami valorile posibile
      if(cond(t))	//verificare conditii pentru valoarea curenta
	  bkt(t+1);
    }

}



int main()
{
	int i;
	freopen("dezastru.in","r",stdin);
	freopen("dezastru.out","w",stdout);
	scanf("%hd %hd\n",&n,&k);
	
	for(i=0;i<n;i++)
		scanf("%lf",&prob[i]);
		
	suma=0;
	bkt(0);
	//printf("%lf\n",p);
	//printf("%lf\n",suma);
	suma=suma/p;
	printf("%lf",suma);

return 0;
}