问题
分析
参考:https://blog.csdn.net/xiao_k666/article/details/82019952
这道题紫书上写的很明白了,主要是思维的问题
首先将小木条首尾相接连成一个圆,相接的点成为一个点,然后在圆上随机选择k个点,一共k+1个点,分成k+1个小木条
k+1个小木条能为成一个多边形的条件是最长的小木条小于总长的1/2
所以对于任何一个点,剩余的k个点如果都和它的距离在半个圆弧之内,就不能构成多边形,概率是
(
k
+
1
)
∗
(
1
/
2
)
k
(k+1)*(1/2)^k
(k+1)∗(1/2)k,所以成功的概率是
1
−
(
k
+
1
)
/
2
k
1-(k+1)/2^k
1−(k+1)/2k
//注意1后面要加LL,变成1LL
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <vector>
#include <utility>
using namespace std;
typedef long long ll;
const int maxn=52;
int T,kase=0,n,k;
ll gcd(ll a,ll b){
return (b==0)?a:gcd(b,a%b);
}
int main(void){
scanf("%d",&T);
while(kase<T){
scanf("%d%d",&n,&k);
ll a=(1LL<<k)-(k+1),b=(1LL<<k);
ll g=gcd(a,b);
printf("Case #%d: %lld/%lld\n",++kase,a/g,b/g);
}
return 0;
}