Cod sursa(job #1638686)

Utilizator PraetorGrigorosoaia Florin Praetor Data 8 martie 2016 08:33:22
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<fstream>
#define MNOA 27 // maximum number of attacks

using namespace std;

FILE*in;
FILE*out;

int nr_of_attacks; // ~N
int nr_of_attacks_with_shield; // ~K
double EARTH[MNOA][MNOA];
double attack_probability[MNOA];
double nr_of_combinations[MNOA][MNOA];

void read()
{
    in=fopen("dezastru.in", "r");

    fscanf(in, "%d%d", &nr_of_attacks, &nr_of_attacks_with_shield);
    for (int i=1; i<=nr_of_attacks; i++)
        fscanf(in, "%lf", &attack_probability[i]);
}

void initialize_EARTH() // and nr_of_combinations
{
    for (int i=0; i<=nr_of_attacks; i++)
        EARTH[i][0]=nr_of_combinations[i][0]=1;
}

void build_EARTH() // and nr_of_combinations
{
    for (int i=1; i<=nr_of_attacks; i++)
        for (int j=1; j<=nr_of_attacks_with_shield; j++)
        {
            EARTH[i][j]=EARTH[i-1][j]+EARTH[i-1][j-1]*attack_probability[i];

            nr_of_combinations[i][j]=nr_of_combinations[i-1][j]+nr_of_combinations[i-1][j-1];
        }
}

void solve()
{
    initialize_EARTH();
    build_EARTH();
}

void show()
{
    out=fopen("dezastru.out", "w");

    fprintf(out, "%.6lf", (double)EARTH[nr_of_attacks][nr_of_attacks_with_shield]/nr_of_combinations[nr_of_attacks][nr_of_attacks_with_shield]);
}

int main()
{
    read();
    solve();
    show();

    return 0;
}