Cod sursa(job #251356)

Utilizator razyelxrazyelx razyelx Data 2 februarie 2009 13:41:02
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
FILE* fin  = fopen("dezastru.in","r");
FILE* fout = fopen("dezastru.out","w");
int n,m,st[30],as,ev;
long long fact=1,nr,l;

float p[30],rez;

void init(int k){
     if(k>0)
       st[k]=st[k-1];
     else
       st[k] = 0;
}
int succ(int k){
    if(st[k]<n-m+k){st[k]++;return 1;}
    return 0;
}
int valid(int k){
    if(st[k] <= st[k-1] && k>1)return 0;
    return 1;
}
int sol(int k){
    return k==m;
}
void tipar(){
     float x=1;
     nr++;
     for(int i=1;i<=m;i++)
	x*=p[st[i]];
     rez+=x;
}
void back(int k){
     init(k);
     while(succ(k))
	  if(valid(k))
	    if(sol(k))tipar();
	    else back(k+1);
}
int main(){
    int i;
    fscanf(fin,"%d%d",&n,&m);
    for(i=1;i<=n;i++)
       fscanf(fin,"%f",&p[i]);

    back(1);

    fprintf(fout,"%.6f",rez/nr);
    return 0;
}