Cod sursa(job #410398)

Utilizator RoswenRus Alexandru Roswen Data 4 martie 2010 12:39:19
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>
FILE *f=fopen("dezastru.in","r"), *g=fopen("dezastru.out","w");
int pr=1,k,n,m,i,poz;
float st[26],s,stot,v[26],p;

int fact(int n)
{
	int p=1;
	for(i=1;i<=n;i++)
		p*=i;
	return p;
}

int valid(int k)
{
	int i;
	for(i=1;i<=m;i++)
		if(i!=k)
		if(st[i]==st[k])
			return 0;
	return 1;
}

void back(int k)
{
	int j;
	for(j=poz+1;j<=n;j++)
	{
		st[k]=v[j];
		poz=k;
		if(valid(k))
			if( st[m] && st[k+1]!=st[m])
			{	
				p=1;
				for(int l=1;l<=m;l++)
					p*=st[l];
				stot+=(p/pr)*m;
			}
			else back(k+1);
	}
}

int main()
{
	fscanf(f, "%d %d", &n, &m);
	for(i=1;i<=n;i++)
		fscanf(f, "%f", &v[i]);
	pr=(fact(n)/(fact(m)*fact(n-m)))*m;
	i=0;
	back(1);
	fprintf(g, "%.6f", stot);
}