LightOJ.1265.Island of Survival(概率)

本文探讨了一个数学问题,岛上存在特定数量的老虎和一个人,通过计算所有老虎互相消灭的概率来确定人最终生存的最大期望概率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接...我找不着了

\(Description\)

岛上有t只老虎,1个人,d只鹿。每天随机有两个动物见面
1.老虎和老虎碰面,两只老虎就会同归于尽;
2.老虎和人碰面或者和鹿碰面,老虎都会吃掉对方;
3.人和鹿碰面,人可以选择吃或者不吃该鹿;
4.鹿和鹿碰面,相安无事;
求最后人活下来的最大期望概率。

\(Solution\)

人要活下来,一定是所有的老虎都死亡,而老虎只能和老虎两两同归于尽。
所以如果老虎数量为奇数,那鹿总有一天会被吃完,人一定不能存活;
如果老虎数量为偶数,则考虑老虎同归于尽的概率即可。
因为鹿不会对人和老虎的数量产生任何影响,只有老虎对人存活产生影响;老虎唯一死亡的方式就是两只老虎碰面。
所以可以忽略鹿。在无限时间里,只要有老虎,鹿是一定被吃光的。
计算:不考虑鹿,总的可能数是C[t+1,2],即老虎和人中选2个;
从t个老虎中选择两个的总数是C[t,2]。所以每次两只老虎同归于尽的概率是 C[t,2]/C[t+1,2] = (t-1)/(t+1)
答案就是所有概率相乘。(老虎的数量是一直在改变的)

从题目出发对问题进行简化。

#include<cstdio>
#include<cctype>
using namespace std;

inline int read()
{
    int now=0;register char c=getchar();
    for(;!isdigit(c);c=getchar());
    for(;isdigit(c);now=now*10+c-'0',c=getchar());
    return now;
}

int main()
{
    int ts=read(),ks=0,t,d;
    double ans;
    while(ts--)
    {
        t=read(),d=read();
        if(t&1)
        {
            printf("Case %d: 0\n",++ks);
            continue;
        }
        ans=1.0;
        while(t)
        {
            ans*=1.0*(t-1)/(t+1);
            t-=2;
        }
        printf("Case %d: %.7lf\n",++ks,ans);
    }

    return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/8444302.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值