Cod sursa(job #1450937)

Utilizator hrazvanHarsan Razvan hrazvan Data 15 iunie 2015 11:55:41
Problema Dezastru Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
#define MAXN 25
double p[MAXN * 1];
double sum = 0.0;
int nr = 0;

inline void calcsum(int n, int k){
  int i, j;
  double d[MAXN + 1][MAXN + 1];
  for(i = 0; i <= n; i++)
    d[i][0] = 1;
  for(i = 1; i <= n; i++){
    for(j = 1; j <= k && j <= i; j++){
      if(i - 1 >= j)
        d[i][j] = d[i - 1][j];
      else
        d[i][j] = 0;
      d[i][j] += d[i - 1][j - 1] * p[i];
    }
  }
  sum = d[n][k];
}

inline void calcnr(int n, int k){
  long long x = 1;
  int i;
  if(n / 2 >= k){
    for(i = n - k + 1; i <= n; i++)
      x *= i;
    for(i = k; i > 1; i--)
      x /= i;
  }
  else{
    for(i = k + 1; i <= n; i++)
      x *= i;
    for(i = n - k; i > 1; i--)
      x /= i;
  }
  nr = x;
}

int main(){
  FILE *in = fopen("dezastru.in", "r");
  int n, k, i;
  fscanf(in, "%d%d", &n, &k);
  for(i = 1; i <= n; i++)
    fscanf(in, "%lf", &p[i]);
  fclose(in);
  calcsum(n, k);
  calcnr(n, k);
  FILE *out = fopen("dezastru.out", "w");
  fprintf(out, "%lf", sum / nr);
  fclose(out);
  return 0;
}