题意:
长为n的木条分为k+1条,求能组成多边形的概率;
解题思路:
我们可以求不能的概率用1减掉即为答案;
我们可以将木条假设为一个圆,则选择k+1个位置分成k+1条边。
不能组成多边形,那么就是有一条边的长度超过了半个圆,其他点在另一半边的概率为(1/2)^k。
而这种点的选择(即分成的边)有k+1种。所以结果为1-(k+1)/(2^k);
代码:
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
using namespace std;
#define ms(a,b) memset(a,b,sizeof(a))
const int mod = 10056;
const int maxn = 40;
#define eps 1e-6
int dp[maxn];
int c[1010][1010];
int f[1010];
long long gcd(long long a, long long b) {
if (!b) {
return a;
}
else return gcd(b, a%b);
}
int main() {
int t;
cin >> t;
int kase = 0;
while(t -- ) {
kase ++;
int n, k;
cin >> n >> k;
long long a = ((long long)1<<k) - k - 1;
long long b = (long long )1<<k;
long long gcd_ = gcd(a,b);
a /= gcd_;
b /= gcd_;
cout << "Case #" << kase << ": " << a << "/" << b << endl;
}
}