1. 程式人生 > >UESTC - 1168 鳳神與狗

UESTC - 1168 鳳神與狗

math namespace code org als pro log iostream atom

原題鏈接

鳳神隱居山林,與貓狗為伴。起初,他擁有cc只貓和dd只狗。每天下午他隨機從中選擇一只出去遊玩並且晚上歸來。如果他帶的是狗,則第二天早上狗的數量增加ww只,否則,貓的數量增加ww只。由於鳳神特別鐘愛狗,某些重要的日子他想帶狗出去玩,於是他想知道他在第aa天和第bb天都帶狗出去玩的概率是多少?

Input

第一行包含55個整數:c(0<c1000000)d(0<d1000000)w(0<w1000000)a(0<a<1000000)b(a<b1000000)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; }

 

UESTC - 1168 鳳神與狗