Cod sursa(job #415366)

Utilizator Cristi09Cristi Cristi09 Data 11 martie 2010 11:08:23
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
float v[26];
int x[26],car[27],ind,as,n,k;
double nfact;
void read()
{
	FILE*f=fopen("dezastru.in","r");
	fscanf(f,"%d%d",&n,&k);
	int i=0;
	for(;i<n;++i)
		fscanf(f,"%f",&v[i]);
	fclose(f);
}
void succesor()
{
	int init=x[ind];
	as=0;
	if(x[ind]<n)
	do
	{
		++x[ind];
		if(!car[x[ind]])
		{as=1;car[init]=0;car[x[ind]]=1;}
	}while(x[ind]<n&&car[x[ind]]&&!as);
	if(!as)x[ind]=init;
}
float suma()
{
	float s=1.0f;
	int i;
	for(i=0;i<k;++i)
		s*=v[x[i]-1];
	return s;
}
void fact()
{
	float i=2;
	nfact=1;
	for(;i<=n;++i)
		nfact*=i;
}
int main()
{
	read();
	float var=0.0;
	fact();
	while(ind>=0)
	{
		succesor();
		if(as)
		{
			if(ind==k-1)
			{
				var+=suma()/nfact;
			}
			else {++ind;x[ind]=0;}
		}
		else {car[x[ind]]=0;--ind;}
	}
	FILE*g=fopen("dezastru.out","w");
	fprintf(g,"%f\n",var);
	fclose(g);
	return 0;
}