Cod sursa(job #971529)

Utilizator marius135Dumitran Adrian Marius marius135 Data 9 iulie 2013 15:14:32
Problema Dezastru Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>
#include<iostream>

using namespace std;

double destroy[32];
int n, k;
double total = 0, product = 1;
double number = 0;
bool invers = 0;

void back( int level, int last, double destroyer) {
	
	if( level == k + 1) {
		if( invers )
			total += product / destroyer;
		else 
			total += destroyer;
		number++;
		return;
	}
	
	for( int i = last; i <= n; ++i) {
		back( level + 1, i + 1, destroy [i] * destroyer);
	}
}

int main() {
	
	freopen("dezastru.in", "r", stdin);
	freopen("dezastru.out", "w", stdout);
	
	cin>>n>>k;
	if( k > n / 2 )
		invers = 1, k = n - k;
	for( int i = 1; i <= n; ++i) {
		cin>>destroy[i];
		product *= destroy[i];
	}
	
	back( 1, 1, 1);
	cout<< total/number;
	
	return 0;
}