Cod sursa(job #1001297)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 24 septembrie 2013 20:16:23
Problema Dezastru Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <iostream>
#include <fstream>
#define nmax 25

using namespace std;

ifstream in("dezastru.in");
ofstream out("dezastru.out");

int n,k,st[nmax],m,num=0;
float v[nmax],s=0,x;

void work(){
    x=1;
    for (int i=1; i<=m; i++)
        x*=v[st[i]];
    s+=x;
}

bool val(int k){
    for (int i=1; i<k; i++)
        if (st[k]==st[i]) return false;
    return true;
}

void back(int k){
    for (int i=1; i<=n; i++){
        st[k]=i;
        if (val(k) && st[k]>st[k-1]){
            if (st[1]>n-m+1) break;
            if (k==m) num++, work();
            else back(k+1);
        }
    }
}

int main()
{
    
    in >> n >> m;
    
    for (int i=1; i<=n; i++)
        in >> v[i];
    
    back(1);
    
    out << s/num;
    
    return 0;
}