Cod sursa(job #371521)

Utilizator hulparuadrianhulparu adrian hulparuadrian Data 5 decembrie 2009 17:07:21
Problema Dezastru Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<stdio.h>
#include<stdlib.h>

int n, k, x[26], nrcomb=0;
float probtotal=0, p[26];

void read_data()
{
    freopen("dezastru.in", "r", stdin);
    scanf("%d%d", &n, &k);
    for(int i=1; i<=n; scanf("%f", &p[i++]));
    fclose(stdin);
    }

int cck(int i)
{
    if (x[i]<=x[i-1] && i>1) return 0;
    return 1;
    }

void calcprob()
{
      float prob=1;
      for(int i=1; i<=k; i++)
      prob*=p[x[i]];
      nrcomb++;
      probtotal+=prob;
      }
      
void write_data()
{
     probtotal/=nrcomb;
     freopen("dezastru.out","w", stdout);
     printf("%f\n", probtotal);
     fclose(stdout);
     }
void solve()
{
     int i=1;
     x[i]=0;
     while(i>0)
     {
               while(x[i]<n)
               {
                            x[i]++;
                            if(cck(i))
                            {
                                      if(i==k) calcprob();
                                      else x[++i]=0;
                                      }
                            }
               i--;
               }
     }

int main()
{
    read_data();
    solve();
    write_data();
    return 0;
    }