Cod sursa(job #55502)

Utilizator anoukAnca Dumitrache anouk Data 27 aprilie 2007 16:59:53
Problema Dezastru Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
using namespace std;

int n, k;
float p[30], m[30][30];

int main()
{
    FILE *fin = fopen("dezastru.in", "r");
    FILE *fout = fopen("dezastru.out", "w");
    
    fscanf(fin, "%d%d", &n, &k);
    for (int i = 1; i <= n; i++)
        fscanf(fin, "%f", p+i);
    
    //m[0][0] = 1;
    for (int i = 1; i <= n; i++)
    {
        m[i][1] = m[i-1][1] + p[i];
        m[i][0] = 1;
       // fprintf(fout, "%.6lf ", p[i]);
    }

    for (int i = 2; i <= n; i++)
        for (int j = 1; j <= i; j++)
            m[i][j] = m[i-1][j] + p[i] * m[i-1][j-1];
    
    int comb = 1;
    for (int i = n; i > n - k; i--)
        comb *= i;
    int aux = 1;
    for (int i = 1; i <= k; i++)
        aux *= i;
    comb /= aux;
    if (n == k) comb = 1;
    float sol = m[n][k] / (float)comb;
    
    fprintf(fout, "%.6f", sol);
    
    fclose(fin);
    fclose(fout);
    return 0;
}