Cod sursa(job #2026295)

Utilizator shantih1Alex S Hill shantih1 Data 24 septembrie 2017 11:23:04
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("dezastru.in");
ofstream fout("dezastru.out");

long long p, P;
double dz, v[30], best[30][30], sum;
int tot, n, k, i, j, s[30];

int main () {
    
    fin >> n >> k;
    for (i = 1; i <= n; i++)
        fin >> v[i];
    
    best[0][0] = 1;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
        {
            if (i == j)     best[i][j] = best[i-1][j-1] * v[i];
            else if (j == 1)     best[i][j] = best[i-1][j] + v[i];
            else best[i][j] = best[i-1][j] + v[i] * best[i-1][j-1];
        }
    
    for (i = 1; i <= n-k; i++)
        s[i] = i;
    
    P = 1;
    for (i = k+1; i <= n; i++)
    {
        p = i;
        for (j = n-k; j >= 1; j--)
            if (p % s[j] == 0 && s[j] != 1)
            {
                p /= s[j];
                s[j] = 1;
            }
        P *= p;
    }
    
    p = 1;
    for (i = 1; i <= n; i++)
        if (s[i] > 1)  p *= s[i];
    
    P /= p;
    fout << best[n][k] / P << "\n";
    return 0;
}