Cod sursa(job #37582)

Utilizator kaesarioDumi Loghin kaesario Data 25 martie 2007 11:12:45
Problema Dezastru Scor 10
Compilator c Status done
Runda preONI 2007, Runda 4, Clasa a 9-a si gimnaziu Marime 1.05 kb
#include <stdio.h>
#define MAX 30

int cont(int k, int *x)
{
    int i;
    for(i=0; i<k; i++)
     if (x[k]==x[i]) return 0;
    return 1;
}
int main()
{
    int n, k, m, i, x[MAX];
    float p[MAX], pc, pt, nr;
    FILE *f;
    f=fopen("dezastru.in","rt");
    fscanf(f,"%i %i", &n, &m);
    for (i=0; i<n; i++) fscanf(f,"%f", p+i);
    fclose(f);
    pt=0;
    nr=0;
    k=0;
    x[k]=-1;
    do
    {
        while (x[k]<n-1)
        {
              x[k]++;
              if (cont(k, x))
               if (k==n-1) 
               {/* avem un aranjament :) */
                   nr++;
                   pc=1;
                   for (i=0; i<m; i++)
                   {
                       pc*=p[x[i]];
                   }
                   pt+=pc;
               }
               else
               {
                   k++;
                   x[k]=-1;
               }
        }
        k--;
    }
    while (k>=0);
    fopen("dezastru.out","wt");
    fprintf(f,"%4.6f", pt/nr);
    fclose(f);
    return 0;
}