Cod sursa(job #3267952)

Utilizator EricDimiCismaru Eric-Dimitrie EricDimi Data 13 ianuarie 2025 09:51:11
Problema Dezastru Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("dezastru.in");
ofstream g("dezastru.out");

const int MAX_N = 25;

int x[MAX_N + 1];
double p[MAX_N + 1], rez, crt;
long long nr;
int n, k;
bool ok;

int main()
{
	f >> n >> k;
	for (int i = 1; i <= n; i++)
		f >> p[i];

	crt = 1.0;

	for (int i = 1; i <= k; i++)
	{
		x[i] = i;
		crt *= p[x[i]];
	}

	rez += crt;
	++nr;

	ok = 1;
	while (ok)
	{
		int i = k;
		while (x[i] == n - k + i && i > 0)
			i--;
		if (i == 0)
			ok = 0;
		else
		{
			x[i]++;
			for (int j = i + 1; j <= k; j++)
				x[j] = x[j - 1] + 1;

			crt = 1.0;
			for (int j = 1; j <= k; j++)
				crt *= p[x[j]];
			rez += crt;
			++nr;
		}
	}

	rez = (double) rez / nr;
	g << fixed << setprecision(6) << rez << '\n';

    f.close();
    g.close();
    return 0;
}