码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 2022牛客多校十 H-Wheel of Fortune(概率+组合)


    题目链接:登录—专业IT笔试面试备考平台_牛客网

    题目:

     样例1输入:

    1. 30 5 0 0 0 0 0 0
    2. 30 5 0 0 0 0 0 0

    样例1输出:

    499122177

    样例2输入:

    1. 10 0 0 0 0 0 0 0
    2. 11 0 0 0 0 0 0 0

    样例2输出:

    748683265

    简化题意:两个将领,一个是A,一个是B,每个将领带领若干个小兵,每个将领带的小兵个数最多有七个,每个人物有一个初始血量,然后每秒随机选择一个人物扣10滴血,可能是将领也可能是小兵,如果A将领比B将领先死那么A将领失败,否则获胜。求A将领获胜的概率。

    分析:其实这道题目跟小兵的血量以及个数是没有关系的,因为小兵的作用只是降低一开始将领的中枪概率,但是在两个将领均存活阶段两个将领的中枪概率始终是相同的,所以小兵只会延长将领死去的时间,但不会影响将领死亡的顺序,也就是说不会对概率造成影响,所以我们一开始直接看成只有两个将领即可,每个将领减10滴血的概率均为1/2,假如A将领经过t1次攻击后会死,B将领经过t2次攻击后会死,那么我们就枚举B将领遭受t2-1次攻击时A将领遭受的攻击次数即可,最后直接再让B将领遭受一次攻击,其中若想要A将领获胜,则B将领遭受t2-1次攻击时A将领遭受的攻击次数的范围为0~t1-1,假如A将领遭受了x次攻击,那么就一共有x+tb-1次攻击,其中每种方案的概率都是1/(2^(x+tb-1)),这种方案的方案数有C(x+tb-1,tb-1),最后还需要直接攻击B将领一次,概率为1/2.那么对应的概率贡献就是C(x+tb-1,tb-1)*qpow(p2[x+tb],mod-2),那么我们枚举一下每个方案的概率就可以求得所有B将领死在A将领前面的方案概率和了。

    细节见代码:

    1. #include<cstdio>
    2. #include<iostream>
    3. #include<algorithm>
    4. #include<cstring>
    5. #include<map>
    6. #include<queue>
    7. #include<vector>
    8. #include<cmath>
    9. using namespace std;
    10. const int N=2e7+10,mod=998244353;
    11. typedef long long ll;
    12. ll fac[N],inv[N],p2[N];
    13. ll qpow(ll a,ll b)
    14. {
    15. ll ans=1;
    16. while(b)
    17. {
    18. if(b&1) ans=ans*a%mod;
    19. b>>=1;
    20. a=a*a%mod;
    21. }
    22. return ans;
    23. }
    24. ll C(ll a,ll b)
    25. {
    26. return fac[a]*inv[b]%mod*inv[a-b]%mod;
    27. }
    28. int main()
    29. {
    30. long long a,b,t;
    31. cin>>a;
    32. for(int i=1;i<=7;i++)
    33. cin>>t;
    34. cin>>b;
    35. for(int i=1;i<=7;i++)
    36. cin>>t;
    37. ll ta=(a-1)/10+1,tb=(b-1)/10+1;
    38. inv[0]=fac[0]=p2[0]=1;
    39. for(int i=1;i<=ta+tb;i++)
    40. {
    41. fac[i]=fac[i-1]*i%mod;
    42. p2[i]=p2[i-1]*2%mod;
    43. }
    44. inv[ta+tb]=qpow(fac[ta+tb],mod-2);
    45. for(int i=ta+tb-1;i>=1;i--)
    46. inv[i]=inv[i+1]*(i+1)%mod;
    47. ll ans=0;
    48. for(int i=0;i<ta;i++)
    49. ans=(ans+C(i+tb-1,tb-1)*qpow(p2[i+tb],mod-2)%mod)%mod;
    50. cout<<ans;
    51. return 0;
    52. }

  • 相关阅读:
    Vue 3-150行代码实现新国标红绿灯效果案例
    真正解决办法:WINDOWS7/WIN7提示错误:无法启动此程序,因为计算机中丢失D3DCOMPILER_47.dll。尝试重新安装该程序以解决此问题
    【SpringCloud】十、Spring Cloud Gateway自定义谓词-自定义过滤器
    2022全网最全最细的jmeter接口测试教程以及接口测试流程详解— 使用JMeter发送一个请求
    MySQL(四)——正则表达式查询、插入数据、删除数据
    rtk原理简要说明
    CCF- CSP 201512-3画图 简单思路 满分题解
    力扣:第 304 场周赛
    1106 2019数列 (递归+题外话)
    orcale 大表物理删除字段时间太慢
  • 原文地址:https://blog.csdn.net/AC__dream/article/details/126441926
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号