题目链接

\(Description\)

一共有\(n+m\)道判断题,其中有\(n\)个答案为"YES",\(m\)个为"NO"。现在以随机顺序给你这\(n+m\)道题,你需要依次回答,每回答一道题就会告诉你该题的正确答案。求最优策略下期望答对多少题。
\(n,m\leq 5\times10^5\)。

\(Solution\)

最优策略自然是每次答剩下数目多的。
每次回答问题要么答对要么答错,且使对应题数-1,不妨用坐标表示。
引用这位dalao的一张图:

左下角为\((0,0)\),右上角为\((n,m)\)(设\(n\geq m\))。题目的每种排列都对应一条从\((n,m)\)走到\((0,0)\)的路径。
那么我们从\((n,m)\)走到\((0,0)\),每走一条蓝边就表示答对一题。可以发现要走的蓝边数目一定是\(n\)(即\(\max(n,m)\))。

如果一直在对角线的一侧走,显然成立。
否则至少要答对\(\max(n,m)-\min(n,m)\)题才能到对角线。然后每答错一题,都会导致一定能答对一题,这里一共会答对\(\min(n,m)\)题。所以总共就是\(\max(n,m)\)。

当走到对角线时(两种答案题数相同),会随便猜一个。这时答对的概率为\(\frac 12\)。即对于每个对角线上的点,每次经过期望答对题数都为\(\frac 12\)。
那么我们对每个对角线上的点统计经过它的路径有多少条即可。然后再除以总路径数,再乘以\(\frac 12\),最后加上\(\max(n,m)\)。

//18ms  7936KB
#include <cstdio>
#include <algorithm>
#define mod 998244353
const int N=1e6;int fac[N+3],ifac[N+3];inline int FP(int x,int k)
{int t=1;for(; k; k>>=1,x=1ll*x*x%mod)if(k&1) t=1ll*t*x%mod;return t;
}
#define C(n,m) (1ll*fac[n+m]*ifac[n]%mod*ifac[m]%mod)//C(n+m,n)int main()
{int n,m; scanf("%d%d",&n,&m);if(n<m) std::swap(n,m);int lim=n+m; fac[0]=fac[1]=1;for(int i=1; i<=lim; ++i) fac[i]=1ll*fac[i-1]*i%mod;ifac[lim]=FP(fac[lim],mod-2);for(int i=lim; i; --i) ifac[i-1]=1ll*ifac[i]*i%mod;long long ans=0;for(int i=1; i<=m; ++i) ans+=1ll*C(i,i)*C(n-i,m-i)%mod;ans=ans%mod*FP(C(n,m),mod-2)%mod*FP(2,mod-2)%mod;printf("%lld\n",(ans+n)%mod);return 0;
}

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

AGC 019F.Yes or No(思路 组合)相关推荐

  1. C++:排列组合算法

    转载请注明出处 1 介绍 排列(Permutation)和组合(Combination)是两个基础的数学概念. 计算排列与组合可以解决一些实际的工程问题,掌握排列组合计算的方法是十分重要的. 目前,网 ...

  2. AI芯片:从历史看未来

    来源:36氪 摘要:从芯片发展的大趋势来看,目前尚处于AI芯片发展的初级阶段,无论是科研还是产业应用都有巨大的创新空间.我们相信,未来十年将是AI芯片发展的重要时期,有望在架构和设计理念取得巨大的突破 ...

  3. 【2020牛客NOIP赛前集训营-提高组(第一场)题解】( 牛牛的方程式,牛牛的猜球游戏,牛牛的凑数游戏,牛牛的RPG游戏)

    未完待续... T1:牛牛的方程式 title solution code T2:牛牛的猜数游戏 title solution code T3:牛牛的凑数游戏 title solution code ...

  4. leetcode hot100(第一部分) + python(c++)

    1-1.两数之和 思路1:两层for循环 O(n2) class Solution:def twoSum(self, nums, target):res = []for i in range(len( ...

  5. 奥拉星插件flash下载手机版下载安装_奥拉星游戏插件

    奥拉星游戏插件一款非常好玩的.io系列游戏,游戏都玩法很简单的,给大家提供安卓手机版本下载,非常好玩,可以支持联机,关卡众多,感兴趣的快来下载试玩吧! win10怎么关闭代理网络游戏 1.海量资源 1 ...

  6. php 重命名 漏洞,上传漏洞[汇总]

    最后必然失去的希望就是毒药啊. 个人对上传漏洞的理解在第一章节就说过了,这里稍微复述一下.上传漏洞按个人理解分两种,第一种是代码层的.即代码过滤不严格,或者使用客户端本地校验.第二种是服务层的,比如i ...

  7. 自动定时发送邮件的方法 —— 定时执行专家V6.8

    目录 ▉ 定时发送简单邮件 ◆前提条件 ◆实现思路 ◆设置方法 ▉ 定时执行专家简介 ◆最新版下载链接 ◆2023-03-21  V6.8 - 更新日志 ▉ 定时发送简单邮件 ◆前提条件 - 电脑安装 ...

  8. go扩展ticker实现优雅起停

    目录 ticker源码分析 关键源码 ticker核心源码 startTimer stopTimer sentTime 核心源码 源码解读 分析 注意事项 ticker优化关闭思路 MyTicker代 ...

  9. MySQL实战——表、索引创建与优化

    目录 前言 MySQL表.索引 优化实战 优化前 - 表.索引结构 表优化思路 非聚簇索引优化思路 组合索引优化思路 认识key_len 依据最左匹配选择 只使用一列也能走联合索引 依据最左匹配选择 ...

最新文章

  1. python flask分页_flask 分页
  2. 筛法求素数 素数打表
  3. quill变html转化,将Quill Delta转换为HTML
  4. 为什么要保持软件包依赖项自由循环的五个原因
  5. 戴尔电脑好还是华为好_华硕和戴尔笔记本哪种好 华硕和戴尔优缺点分析【详解】...
  6. mysql线程缓存和表缓存
  7. Linux 压缩与解压
  8. 清新手绘水果平面设计|面膜的包装设计越来越精致了!
  9. devc中文注释显示问号_Python零基础入门-(如何让人读懂你的代码)文档注释
  10. list中随机获取n条、随机生成4位6位数工具类,1-n范围随机数,Math.random()生成随机数
  11. python风变编程是骗局吗-请问风变编程的Python课怎么样?
  12. 对Kindle进行可用性研究
  13. python神经网络编程 代码,python神经网络算法代码
  14. js删除节点的坑(删不完),以li为列
  15. Altium 拖动已布线的双排焊盘
  16. Total Uninstall 6安装使用
  17. 记一次matespace导致的FGC导致接口性能尖刺
  18. 蚂蚁金服 CTO 新加坡演讲:小蚂蚁是如何“爬”上区块链的?
  19. 在linux用锐捷客户端上校园网
  20. PhotoShop画布自动适应图像的尺寸大小?

热门文章

  1. ffmpeg 安装_CentOS7.6安装SRS和ffmpeg实现自建直播服务器
  2. laravel生成php代码,laravel代码生成器
  3. python定义一个类怎么弄_Python怎么创建一个类
  4. python与数据库完整项目_python入门:操作数据库项目实例分享
  5. 使用 session_destroy() 销毁session文件时 报 Trying to destroy uninitialized session 错误解决办法
  6. 计算器小程序java课程设计,java课程设计----计算器小程序报告.doc
  7. 1024灯控台初学_MA2的小弟MA1控台说明书
  8. python创建列表副本_Python编程15:Python列表的排序和列表的副本
  9. vim 配置_一步一步配置vim(4)--与latex进行实时显示
  10. java jvisualvm linux,从Linux JDK中发出jvisualvm时出现乱码