Cod sursa(job #79210)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 21 august 2007 12:35:59
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
# include <stdio.h>

const long int NRB=25;
const long int MAXN=1<<NRB;
long int nrb[MAXN+1],n,k;
float p[MAXN+1],s,v[MAXN+1];

void citire()
{
FILE *f=fopen("dezastru.in","r");
fscanf(f,"%ld%ld",&n,&k);
long int i;
for (i=1;i<=n;i++) fscanf(f,"%f",&v[i]);
fclose(f);
}

void scrie(float sol)
{
FILE *g=fopen("dezastru.out","w");
fprintf(g,"%-.6f\n",sol);
fcloseall();
}

int main()
{
citire();
p[0]=1;nrb[0]=0;
long int i,j,q,t,pos,max=(1<<n)-1;
for (i=1;i<=max;++i)
	{
	q=i&(~(i-1));
	t=q;
	nrb[i]=nrb[i-q]+1;
	pos=0;
	while (q) {pos++;q>>=1;}
	p[i]=p[i-t]*v[pos];
	if (nrb[i]==k) s+=p[i];
	}
long long int c[30][30]={0};
c[0][0]=1;
for (i=1;i<=n;i++)
	{
	c[i][0]=1;
	for (j=1;j<=k;j++)
		c[i][j]=c[i-1][j]+c[i-1][j-1];
	}
scrie(s/c[n][k]);
return 0;
}