Cod sursa(job #1196814)

Utilizator pavlov.ionPavlov Ion pavlov.ion Data 9 iunie 2014 11:18:35
Problema Dezastru Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdio.h>
#include<stdlib.h>
int st[26],n,k,p,nr=0;
double prob[2000000],s=0,d[26];
void Init()
{ st[k]=0; }
int Am_Succesor() {
	if(st[k]<n) {
		st[k]++;
		return 1;
	}
	return 0;
}
int E_valid(){
	for(int i=1;i<k;i++)
			if(st[i]==st[k]) return 0;
	return 1;
}
int Solutie()
	{ return k==p; }
void back(){
int AS;
k=1;Init();
while(k>0){
	do {} while((AS=Am_Succesor()) && !E_valid());
	if (AS)
		if(Solutie()) {
						nr++;
						prob[nr]=1;
						for(int i=1;i<=p;i++)
								prob[nr]=prob[nr]*d[st[i]];
						}
			else { k++;Init(); }
	else k--;
}
}
int main() {
freopen("dezastru.in","r",stdin);
freopen("dezastru.out","w",stdout);
	scanf("%d%d",&n,&p);
	for(int i=1;i<=n;i++)
		scanf("%lf",&d[i]);
	back();
	for(int i=1;i<=nr;i++)
					s=s+prob[i];
	printf("%.6lf",s/nr);
	fclose(stdin);
	fclose(stdout);
return 0;
}