Ranking (as of 2013-06-15): 236 out of 469
Language: C++
/*
UVa 557 - Burger
To build using Visual Studio 2008:
cl -EHsc -O2 burger.cpp
*/
#include <iostream>
#include <cstdio>
using namespace std;
/*
Let p(n) be the probability that Ben and Bill get the same type of burger
for n guests, then:
p(n) = 1.0 - C(n - 2, (n - 2) / 2) / 2^(n - 2).
Here, C(n, k) is the number of k-combinations from a given set S of n elements.
Let pf(n) = C(n - 2, (n - 2) / 2) / 2^(n - 2).
Then, using pf(n - 2), pf(n), pfn(n) can be calculated recursively as below:
pf(n) = {(n - 3) / (n - 2)} * pf(n - 2).
pf(2) = 1.0;
*/
const int n_max = 100000; // max. number of guests
double pf[1 + n_max / 2];
int main()
{
pf[1] = 1.0;
for (int i = 2; i <= n_max / 2; i++)
pf[i] = pf[i - 1] *
static_cast<double>(2 * i - 3) / static_cast<double>(2 * i - 2);
int nr_problems;
cin >> nr_problems;
while (nr_problems--) {
int n;
cin >> n;
printf("%.4lf\n", 1.0 - pf[n / 2]);
}
return 0;
}
This comment has been removed by the author.
ReplyDeleteCould you please help me understand the question better?
ReplyDeleteFor n=4
Here is the valid permutations:
--AABB
ABAB
ABBA
BAAB
BABA
--BBAA
so the probability that the last two get the same type of sandwich is 2/6 !!