Link:http://acm.hdu.edu.cn/showproblem.php?pid=5194
1 1 2 3
1/2 6/5HintCase 1: S='01' or S='10', so the expected times = 1/2 = 1/2 Case 2: S='00011' or S='00101' or S='00110' or S='01001' or S='01010' or S='01100' or S='10001' or S='10010' or S='10100' or S='11000', so the expected times = (1+2+1+2+2+1+1+1+1+0)/10 = 12/10 = 6/5
解题思想:
考虑期望的可加性。第 i(1≤i<n+m) 个位置上出现0,第 i+1 个位置上出现1的概率是 mn+m×nn+m−1 ,那么答案自然就是 ∑i=1n+m−1mn+m×nn+m−1=nmn+m 如果你不能马上想到上述的简便的方法,也可以选择暴力枚举所有01串,也是可以AC的。最后一步你需要再计算一下gcd,十分简便。
AC code:
#include<iostream> #include<stdio.h> #include<map> #include<vector> #include<set> #include<cstdlib> #include<string.h> #include<algorithm> #include<cmath> #define MAXN 1000010 using namespace std; int gcd(int a,int b) { if(a<b) { int t=a; a=b; b=t; } int r=a%b; while(r) { a=b; b=r; r=a%b; } return b; } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int a=n*m; int b=n+m; int t=gcd(a,b); a/=t; b/=t; printf("%d/%d\n",a,b); } return 0; }