Cod sursa(job #411110)

Utilizator crusRus Cristian crus Data 4 martie 2010 18:44:57
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#define nmax 25
float v[nmax+1];
int n,k;
float res_nr;
int res_cnt;
struct rez
{
	float nr;
	int cnt;
};
void readdata()
{
	freopen("dezastru.in","r",stdin);
	scanf("%d %d",&n,&k);
	for (int i=1;i<=n;i++)
		scanf("%f",&v[i]);
}
void solve()
{
	rez matrix[nmax+1][nmax+1];
	for (int i=1;i<=n;i++)
		for (int j=1;j<=n;j++)
		{
			matrix[i][j].cnt=-1;
			matrix[i][j].nr=0;
		}

	for (int i=1;i<=n;i++)
	{
		matrix[i][1].nr=v[i];
		matrix[i][1].cnt=1;
	}
	for (int j=2;j<=k;j++)
		for (int i=1;i<=n;i++)
		{			
			for (int ii=1;ii<i;ii++)
			{
				if (matrix[ii][j-1].cnt!=-1)
				matrix[i][j].nr+=matrix[ii][j-1].nr*v[i];
				if (matrix[i][j].cnt==-1)
					matrix[i][j].cnt=matrix[ii][j-1].cnt;
				else
					matrix[i][j].cnt+=matrix[ii][j-1].cnt;
			}
		}
	for (int i=1;i<=n;i++)
	{
		if (matrix[i][k].cnt!=-1)
		{
			res_nr+=matrix[i][k].nr;
			res_cnt+=matrix[i][k].cnt;
		}
	}
}
void writedata()
{
	freopen("dezastru.out","w",stdout);
	printf("%.6f",res_nr/res_cnt);
}
int main()
{
	readdata();
	solve();
	writedata();
	return 0;
}