Cod sursa(job #66500)

Utilizator raula_sanChis Raoul raula_san Data 19 iunie 2007 13:54:00
Problema Dezastru Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>

#define dim 26

int N, K, Sol[dim];

double A[dim], Solf, Soli, fact = 1, kfact = 1;

void Back(int k)
{
     if(k == K + 1)
     {
          Soli = 1;
          for(int i=1; i<=K; ++i)
                   Soli *= A[Sol[i]];
          Soli /= fact;
          Soli *= kfact;
          Solf += Soli;
     }
     
     else
     {
         if(k == 1)
         {
              for(int i=1; i<=N-K+1; ++i)
              {
                                 Sol[k] = i;
                                 Back(k + 1);
              }
         }
         else
         {
             for(int i=Sol[k-1]+1; i<=N; ++i)
             {
                     Sol[k] = i;
                     Back(k + 1);
             }
         }
     }
}

int main()
{
    FILE *f = fopen("dezastru.in", "rt");
    FILE *g = fopen("dezastru.out", "wt");
    
    fscanf(f, "%d %d", &N, &K);

    for(int i=1; i<=N; ++i)
    {
			fscanf(f, "%lf", A+i);
            fact *= i;
            
            if(i <= K) kfact *= i;
    }

    Back(1);

    fprintf(g, "%.6lf", Solf);
    
    fclose(f);
    fclose(g);
    
    return 0;
}