Cod sursa(job #1301476)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 25 decembrie 2014 23:45:34
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>

int n, k;
double val;

double v[26];
int fact[26];
short perm[26];
short uz[26];

void generare(int pos);
double calcul();

int main() {
	int i;

	FILE *fin = fopen("dezastru.in", "r");
	fscanf(fin, "%d%d", &n, &k);

	for (i = 1; i <= n; i++)
		fscanf(fin, "%lf", &v[i]);
	
	fclose(fin);

	fact[1] = 1;
	for (i = 2; i <= n; i++)
		fact[i] = fact[i - 1] * i;

	generare(1);
	
	FILE *fout = fopen("dezastru.out", "w");
	fprintf(fout, "%.6lf", val);
	fclose(fout);

	return 0;
}

void generare(int pos) {
	int i;

	if (pos == k + 1) {
		val += calcul();
	} else {
		for (i = 1; i <= n; i++) {
			if (uz[i] == 0) {
				uz[i] = 1;
				perm[pos] = i;
				generare(pos + 1);
				uz[i] = 0;
			}
		}
	}
}

double calcul() {
	int i;
	double prod = 1;

	for (i = 1; i <= k; i++)
		prod *= v[perm[i]];

	return prod / fact[n];
}