#include <bits/stdc++.h>
using namespace std;
int n, r, kase;
double inp[22], Pe[22];
#define REP(i,n) for(int i=0;i<(n);i++)
int main(int argc, char const *argv[])
{
while (cin >> n >> r && n)
{
double Ptal = 0; string str;
memset(Pe, 0, sizeof(Pe));
REP(i, n) cin >> inp[i], str += (i < n - r ? '0' : '1');
do
{
double pi = 1;
REP(j, n) pi *= (str[j] - '0' ? inp[j] : 1 - inp[j]);
Ptal += pi;
REP(j, n) Pe[j] += (str[j] - '0' ? pi : 0);
}
while (next_permutation(str.begin(), str.end()));
printf("Case %d:\n", ++kase);
REP(i, n) printf("%.6f\n", Pe[i] / Ptal);
}
return 0;
}
按照树上的写法,枚举所有的排列,运用next_permutation函数