[LightOJ 1265 Island of Survival ]数学、概率
分类:math
概率
1. 题目链接
[LightOJ 1265 Island of Survival ]
2. 题意描述
在一个岛上,有一个人,t 只老虎,d 只鹿,每天随机选择两种生物碰面。
a)如果是人和老虎碰面,老虎会吃掉人
b)如果是老虎和鹿碰面,老虎会吃掉鹿
c)如果两只鹿碰面,什么都不会发生
d)如果人和鹿碰面,人可以选择吃或者不吃鹿(取决于你)
e)如果两只老虎碰面,同归于尽
求人存活的最大概率。
(1 ≤ t,d ≤1000,1≤数据组数T≤200)
3. 解题思路
这个题目只要细心可以发现,鹿的存在对人的存活率其实并没有影响。还有,当老虎的个数是奇数的时候,人不可能存活。
剩下的,我们只考虑偶数个老虎的情况。人存活的概率公式化简步骤如下:
∏k=1t/2C22∗kC22∗k+1=∏k=1t/22k(2k−1)(2k+1)2k=∏k=1t/22k−12k+1=1t+1
4. 实现代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef long double LB;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
const int INF = 0x3f3f3f3f;
const LL INFL = 0x3f3f3f3f3f3f3f3fLL;
const LB eps = 1e-8;
const int MAXN = 1000 + 5;
int main() {
#ifdef ___LOCAL_WONZY___
freopen("input.txt", "r", stdin);
#endif // ___LOCAL_WONZY___
int T, cas, t, d; cin >> T; cas = 0;
while(T --) {
cin >> t >> d;
cout << "Case " << (++cas) << ": ";
if(t & 1) {
cout << "0\n";
continue;
}
LB ans = (LB)1.0 / (t + 1);
cout << fixed << setprecision(7) << ans << "\n";
}
return 0;
}