Cod sursa(job #1002067)

Utilizator sleepaholicNeculaescu Theodor sleepaholic Data 26 septembrie 2013 20:19:46
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <cstdio>
#define MAX_N 30
using namespace std;

int n , k ;
long long c[MAX_N][MAX_N] ;
double a[MAX_N][MAX_N] , p[MAX_N] ;

int combinari( int n , int k )
{
    int i , j ;

    c[0][0] = 1 ;

    for( i = 1 ; i <= n ; i++ )
    {
        c[i][0] = 1 ;

        for( j = 1 ; j <= n ; j++ )
        {
            c[i][j] = 1LL*c[i-1][j-1] + 1LL*c[i-1][j] ;
        }
    }

    return c[n][k] ;
}

void citire()
{
    freopen("dezastru.in","r",stdin);

    scanf("%d %d", &n , &k) ;

    int i ;

    for( i = 1 ; i <= n ; i++ )
    {
        scanf("%lf" , &p[i]) ;

        a[i][1] = a[i-1][1]*1.0 + p[i]*1.0 ;
    }
}

void dinamica()
{
    int i , j ;

    for( i = 1 ; i <= n ; i++ )
    {
        for( j = 2 ; j <= k ; j++)
        {
            a[i][j] = a[i-1][j]*1.0 + 1.0*a[i-1][j-1]*p[i] ;
        }
    }
}


void scrie()
{
    int i , j;

    for(i=1; i<=n; i++)
    {
        for(j=1; j<=k; j++)
        {
            cout<<a[i][j]<<' ';
        }
        cout<<endl;
    }
}

int main()
{
    citire();

    dinamica();

    freopen("dezastru.out" , "w" , stdout);

    double answer ;

    answer = a[n][k] / combinari(n,k) ;

    printf("%.6lf" , answer ) ;

    return 0 ;

}