凤神隐居山林,与猫狗为伴。起初,他拥有cc只猫和dd只狗。每天下午他随机从中选择一只出去游玩并且晚上归来。如果他带的是狗,则第二天早上狗的数量增加ww只,否则,猫的数量增加ww只。由于凤神特别钟爱狗,某些重要的日子他想带狗出去玩,于是他想知道他在第aa天和第bb天都带狗出去玩的概率是多少?
Input
第一行包含55个整数:c(0<c≤1000000),d(0<d≤1000000),w(0<w≤1000000),a(0<a<1000000),b(a<b≤1000000)c(0<c≤1000000),d(0<d≤1000000),w(0<w≤1000000),a(0<a<1000000),b(a<b≤1000000)
Output
答案用最简分数表示,x/yx/y,xx为分子,yy为分母。
Sample Input
1 1 1 1 2
Sample Output
1/3
分析:
参考自:http://blog.csdn.net/code12hour/article/details/46669143
原博文写得很清楚,公式列出来了。我只是在这里写写自己的理解,加深印象。
首先求第i天带狗出门的概率。设h(i,j)表示前i天中,有j天带的是狗的概率。那么,第i天带狗出门的概率pi等于前i天结束后所有可能的狗的数目再除以猫狗的总数。
第i+1天带狗出门的概率就是前i-1天的各种情况加上第i天带狗或带猫。这里就是我认为的需要理解的地方,接下来看上面链接的求证过程就好,一定能看懂的了。
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; typedef long long LL; int main(){ int c, d,w,a,b; scanf("%d%d%d%d%d",&c,&d,&w,&a,&b); LL x = 1LL*d*(d+w); LL y = 1LL*(c+d)*(c+d+w); LL g = __gcd(x,y); printf("%lld/%lld",x/g,y/g); return 0; }