您的位置:首页 > 其它

LightOJ1265-Island of Survival

2017-04-27 16:43 351 查看


Island of Survival

 

题意:有一个生存游戏,里面t只老虎,d只鹿,还有一个人,每天都要有两个生物碰面,现在有以下规则

1.老虎和老虎碰面,两只老虎就会同归于尽

2.老虎和人碰面或者和鹿碰面,老虎都会吃掉对方

3.人和鹿碰面,人可以选择吃或者不吃该鹿

4.鹿和鹿碰面,相安无事

问人存活下来的概率

解题思路:人生存下来的条件就是不被老虎吃掉,所以只要所有的老虎都同归于尽了,人就可以生存下来了。如果老虎的数量是奇数,那么人总有一天会被吃掉的,如果老虎的数量是偶数,那就算一下所有老虎同归于尽的概率,这个概率就是人存活下来的概率了。鹿可以忽略不计。在时间无限的情况下,老虎没死光的话,鹿总有一天是会被全部吃掉的

当老虎的数量是偶数是:总情况就是在tiger + 1(老虎和人)里面选两个碰面C(tiger + 1, 2); 两只老虎碰面的情况是C(tiger, 2),所以两只老虎碰面的概率是(tiger - 1) / (tiger + 1)

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#include <vector>
#include <set>
#include <bitset>
#include <stack>
#include <map>
#include <climits>
#include <functional>

using namespace std;

#define LL long long
const int INF=0x3f3f3f3f;
const double eps=1e-8;

int main()
{
int t,cas=1;
scanf("%d",&t);
while(t--)
{
int x,y;
scanf("%d %d",&x,&y);
if(x == 0) printf("Case %d: 1\n",cas++);
else if(x%2==1) printf("Case %d: 0\n",cas++);
else
{
double ans=1.0;
while(x)
{
ans*=(x-1.0)/(x+1.0);
x-=2;
}
printf("Case %d: %.6f\n",cas++,ans);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: