前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LightOj_1265 Island of Survival

LightOj_1265 Island of Survival

作者头像
若羽
发布2019-07-15 16:41:02
2300
发布2019-07-15 16:41:02
举报

题目链接

题意:

  在孤岛生存, 孤岛上有t头老虎,d头鹿, 每天会出现随机出现两只生物(包括你自己), 如果出现了一只老虎,那么你将被吃掉, 如果两只老虎, 则两只老虎会同归于尽,其他情况你都将生存下来。

  当孤岛上没有老虎时, 就视为你生存成功。

  问你生存成功的最大概率。

思路:

  仔细想一想, 生存下来其实只和老虎有关, 因为你遇上其他情况, 你都会存活下来。

  就相当于是一个0 - 1分布, 要么活下来, 要么被吃掉。

  如果t只老虎是一个奇数, 那么必然存活失败, 因为老虎的消耗是成对的, 你要存活下来最基本的条件就是所有的老虎都同归于尽了, 或者没有老虎, 否则你总会有一天遇见老虎。

  如果t只老虎是一个偶数, 那么不一定存活成功。

  因为每天都会出现两只生物, 那么我们计算t只老虎同归于尽的最大概率。

  每天随机出现两只生物,所有的情况数:t * (t + 1)(因为鹿与存活与否无关),两只老虎遇见的情况数:t * (t - 1)

  概率P = t * (t - 1) / (t * (t + 1)) = (t - 1) / (t + 1)

代码:

 1 #include <cmath>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <ctime>
 6 #include <set>
 7 #include <map>
 8 #include <list>
 9 #include <queue>
10 #include <string>
11 #include <vector>
12 #include <fstream>
13 #include <iterator>
14 #include <iostream>
15 #include <algorithm>
16 using namespace std;
17 #define LL long long
18 #define INF 0x3f3f3f3f
19 #define MOD 1000000007
20 #define eps 1e-6
21 #define MAXN 1010
22 int t, d;
23 double solve()
24 {
25     double ans = 0.0;
26     if(t % 2 == 1) return ans;
27     ans = 1.0;
28     if(t == 0) return ans;
29 
30     int x = t;
31     while(x)
32     {
33         ans *= 1.0 * (x - 1.0) / (x + 1.0);
34         x -= 2;
35     }
36     return ans;
37 }
38 
39 int main()
40 {
41     int T;
42     int kcase = 0;
43     scanf("%d", &T);
44     while(T --)
45     {
46         scanf("%d %d", &t, &d);
47         printf("Case %d: %.7lf\n", ++ kcase, solve());
48     }
49     return 0;
50 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-08-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档