把木条抽象成一个圆, 那么在圆上选取一点, 过圆心平分圆, 如果剩下的n个点在圆的同一侧, 则不能构成矩形, 跟N无关。
不能构成矩形的概率p = 1 / 2 ^ n, 起始点共有k + 1种, 所以能构成矩形的概率为1 - p * (k + 1)。
#include <iostream>
using namespace std;
long long gcd(long long a, long long b) {
return b == 0 ? a : gcd(b, a % b);
}
int main() {
int T, Case = 0;
cin >> T;
while(T--) {
int N, k;
long long q, p = 1;
cin >> N >> k;
for(int i = 0; i < k; i++) p *= 2;
q = p - (k + 1);
cout << "Case #" << ++Case << ": " << q / gcd(q, p)
<< '/' << p / gcd(q, p) << endl;
}
return 0;
}