题解:如果只是在长木棍时操作,有点不太好想。假如看作一个圆,切 k+1 次,问能组成多边形的概率?从反面考虑,不能组成多边形的概率。
当切出的一部份长度超过圆的1/2时,肯定不能组成多边形,即有k个点在半圆上,概率为 1/ 2k ,而第一个点有k+1种取法,所以不能组成的概
率为 (k+1)/2k。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 typedef long long ll; 7 8 int n,k,kase; 9 10 ll gcd(ll a,ll b){ 11 if(b==0) return a; 12 return gcd(b,a%b); 13 } 14 15 void solve(int t){ 16 ll temp=1; 17 for(int i=1;i<=k;i++) temp=temp*2; 18 ll temp2=gcd(temp-k-1,temp); 19 printf("Case #%d: %lld/%lld\n",t,(temp-k-1)/temp2,temp/temp2); 20 } 21 22 int main() 23 { cin>>kase; 24 for(int t=1;t<=kase;t++){ 25 cin>>n>>k; 26 solve(t); 27 } 28 return 0; 29 }