题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6574
思路:用古典概型的方法计算俩个区间不想交的概率,再用 1 减去即可。
由于 枚举俩种括号的所有可能出现的情况是不易的 并且我们知道 俩个区间不相交只和左边区间的右端点和右边区间的左端点有关。已知 选区间 满足伯努利实验,是个独立实验。所以我们可以直接设 左边区间 的右端点为 R左、右边区间的 左端点为L右,那么只要 R左 < L右 即可。
所以不相交的概率可以这么求
然后用逆元公式处理下就行了。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int mod = 1e9+7; 5 ll ksm(ll a,ll b){ 6 ll res=1; 7 while(b){ 8 if(b&1){ 9 res=res*a%mod; 10 } 11 a=a*a%mod; 12 b>>=1; 13 } 14 return res; 15 } 16 int main() 17 { 18 ll n; 19 while(cin >> n) 20 { 21 cout << (n+1)*ksm(2*n,mod-2)%mod << endl; 22 } 23 return 0; 24 }