頑猴
Time Limit:1000MS Memory
Limit:524288K
Total Submit:2 Accepted:2
Description
從前有一隻小考拉在家切題,切着切着他無聊了,於是他到森林裏找小猴們玩。森林裏總共有n +
m只小猴,這些猴們跟他都是好朋友。他來到森林時,有n只小猴已經玩到無聊了,有m只還沒有。每一個單位的時間,他都會隨機找兩隻小猴,然後他們仨玩遊戲。完了一單位時間後這兩隻小猴都會變得感到無聊。這時小考拉又會重新找小猴玩。
小猴們想知道,如果這個壞蛋不斷找他們玩,那麼,在期望下,多少單位的時間後他們會都變得很無聊。你能幫助他們麼?
Input
輸一行兩個整數n和m。
Output
輸出一行一個實數,爲所有猴變得無聊的期望時間。保留三位小數。
Sample Input
Sample Output
Hint
1 ≤ n, m ≤ 50
Source
一道概率的題。
這種題挺少見的,上次碰到是在特長生比賽的時候,然後沒有人做出來。。
首先,題目給的樣例我只能看懂第一個。
對於樣例2,我一開始想:有可能永遠取不到那個有聊的猴子,那時間不就是正無窮了嗎?
後來老師說要用到極限的思想去理解。。
然後看了正解:
對於有m個猴子有聊的情況,
令f[i]表示有i只有聊,n+m-i只無聊。
令 p0 表示 隨機取出 兩隻無聊 猴子的概率
p1 一隻無聊,一隻有聊
p2 兩隻有聊
則:f[i]:=f[i-1]*p1+f[i-2]*p2+f[i]*p0+1
所以:f[i]:=(f[i-1]*p1+f[i-2]*p2+1)/(1-p0)
最後輸出f[m]
應該這樣想:
對於有i個猴子有聊的情況:
這種情況有三種來源:
1,i-1個猴子有聊,被抽出一隻無聊,一隻有聊。概率:p1。
2,i-2個猴子有聊,被抽出兩隻有聊。 概率:p2。
3,i 個猴子有聊,被抽出兩隻無聊。 概率:p0。
這樣,就能遞推出結果了。
var
n,m,i,j,tot,pyy,pyw,pww:longint;
f:array[-1..100]of real;
begin
read(n,m);
tot:=0;
for j:=2 to n+m do
tot:=tot+j-1;
for i:=1
to m do
begin
pyy:=0;
for j:=2 to i do
pyy:=pyy+j-1;
pww:=0;
for j:=2 to (m+n-i) do
pww:=pww+j-1;
pyw:=tot-pww-pyy;
f[i]:=(f[i-1]*pyw/tot+f[i-2]*pyy/tot+1)/(1-pww/tot);
end;
writeln(f[m]:0:3);
end.