Cod sursa(job #371552)

Utilizator hulparuadrianhulparu adrian hulparuadrian Data 5 decembrie 2009 19:32:22
Problema Dezastru Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<stdio.h>
#include<stdlib.h>

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

void read_data()
{
    freopen("dezastru.in", "r", stdin);
    scanf("%d%d", &n, &k);
    for(int i=1; i<=n; scanf("%lf", &p[i++]));
    fclose(stdin);
    }
      
void write_data()
{
     probtotal/=nrcomb;
     freopen("dezastru.out","w", stdout);
     printf("%f\n", probtotal);
     fclose(stdout);
     }

int cck(int i)
{
    if (x[i]<=x[i-1] && i>1) return 0;
    return 1;
    }
    
void solve()
{
     double prob=1;
     int i=1;
     x[i]=0;
     while(i>0)
     {
               while(x[i]<n)
               {
                            x[i]++;
                            if (cck(i))
                            {
                                      if(i==k)
                                      {
                                              prob*=p[x[i]];
                                              probtotal+=prob;
                                              nrcomb+=1;
                                              prob/=p[x[i]];
                                              }
                                      else {prob*=p[x[i]];x[++i]=0;}
                                      }
                            }
               prob/=p[x[--i]];
               }
     }

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