传送门

题目大意

有若干道判断题,其中有$n$道答案是$Yes$,另外$m$道答案是$No$,问题除了答案差异本质相同。这些题一道都不会做,但是事先知道$n$和$m$的数量。每次机器会事先等概率地排列着$n+m$个答案(共$\dbinom{n+m}{n}$种可能),概率地选择一道没有问过的题目询问,然后答题者就必须给出答案,随后机器就会立即反馈你这道题是否判断错误,求如果采用最优策略,期望最多猜对多少道题,答案对$998244353$取模。

题解

神仙题,$tourist$出的是一个很难略微复杂的解法,然后被人用冷静思考大力分析给碾过去了$Orz$...

由于交换$n,m$对答案并无影响,不妨设$n\leq m$。

考虑每一种答案的排列对应着从$(m,n)$到$(0,0)$的每次只能沿着正下或正左走$1$的距离的一条路径。

由于答案取每种路径的概率是相等的,我们只需要算所有路径的期望之和即可。

假设对于某一条路径,到达了$x,y$,当$x<y$时,我们一定会猜它向下走,当$x>y$时,我们一定会才它向左走。

所以对于路径上所有$x\ne y$的状态猜对的数量路径与下图红色边的交集大小。

通过找规律可以发现这个值一定是$m$。因为当$x\ne y$时,一定会有某一个状态走到$x=y$,所以可以证明。

对于所有$x=y$的状态,不论怎么猜都会毫无头绪,所以贡献是$\frac {1}{2}$。

这部分的贡献是所有路径经过的$(x,y)(x=y,x,y>0)$的点的数量,除以所有路径数。

可以预处理阶乘组合数$O(n)$解决。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define mod 998244353
#define inv2 499122177
#define M 1000020
using namespace std;
namespace IO{int Top=0; char SS[20];void write(int x){if(!x){putchar('0');return;} if(x<0) x=-x,putchar('-');while(x) SS[++Top]=x%10,x/=10;while(Top) putchar(SS[Top]+'0'),--Top;}int read(){int nm=0,fh=1; char cw=getchar();for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');return nm*fh;}
}using namespace IO;
int mul(int x,int y){return (LL)x*(LL)y%mod;}
int add(int x,int y){return (x+y>=mod)?x+y-mod:x+y;}
int mus(int x,int y){return (x-y<0)?x-y+mod:x-y;}
int qpow(int x,int sq){int res=1;for(;sq;sq>>=1,x=mul(x,x)) if(sq&1) res=mul(res,x);return res;
}
int n,m,fac[M],ifac[M],ans;
int C(int tot,int tk){return mul(fac[tot],mul(ifac[tot-tk],ifac[tk]));}
int main(){n=read(),m=read(),fac[0]=1; if(n>m) swap(n,m);for(int i=1;i<=n+m;i++) fac[i]=mul(fac[i-1],i); ifac[n+m]=qpow(fac[n+m],mod-2);for(int i=n+m;i;i--) ifac[i-1]=mul(ifac[i],i); for(int i=1;i<=n;i++) ans=add(ans,mul(C(i<<1,i),C(n+m-(i<<1),n-i)));write(add(mul(ans,mul(inv2,qpow(C(n+m,m),mod-2))),m)),putchar('\n'); return 0;
}

  

转载于:https://www.cnblogs.com/OYJason/p/9825230.html

Agc019_F Yes or No相关推荐

最新文章

  1. java字符串的知识总结
  2. easyswoole数据库连接池_easyswoole redis连接池:集群迁移教程
  3. linux命令冒号加叹号,Linux中的叹号命令
  4. android百度输入法表情符号,分析Android 搜狗输入法在微信和QQ中发送图片和表情...
  5. 《机器学习实战》学习总结(六)PCA算法原理
  6. MATLAB 读取txt文件(importdata函数)
  7. javaScript 对象访问属性的另一种方式
  8. Android 数据库 在使用 update更新的时候,总是无法更新,还没有异常抛出!
  9. 【优化调度】基于matlab求解共享储能电站工业用户日前经济调度优化问题【含Matlab源码 1103期】
  10. iOS 视频播放器旋转问题小结
  11. OSPF协议单域配置实例
  12. Verilog语言程序框架
  13. PanDownload 复活了!60MB/s!附下载地址
  14. 【数据库】某医院病房计算机管理中需要如下信息: 科室:科名、科地址、科电话、医生姓名 病房:病房号、床位号、所属科室名 医生:姓名、职称、所属科室名、年龄、工作证号 病人:病历号、姓名、性别、诊
  15. 吸引力法则和《秘密》的理论其实不存在
  16. python作品-python实例作品
  17. IPD思想指导下的企业研发管理成熟度演进模型
  18. STM32F103固件库源码解析——RCC_APB2PeriphClockCmd
  19. python curses_Py之curses:curses库的简介、使用、安装方法详细攻略
  20. 宠物喂食器的设计-基于涂鸦三明治三件套

热门文章

  1. Highcharts使用指南
  2. 华威、剑桥与三星联合提出基于时间核一致性的盲视频超分辨率
  3. Morph-UGATIT:一种支持渐进式域迁移的图像翻译方法
  4. 超强语义分割算法!基于语义流的快速而准确的场景解析
  5. CVPR2019 | 弱监督图像分类建模
  6. 我爱计算机视觉干货集锦分类汇总(2019年5月7日)
  7. CVPR 2019 行人检测新思路:高级语义特征检测取得精度新突破
  8. 零基础快速入门python教程,结合新手练习的5大项目
  9. 计算机视觉论文-2021-06-23
  10. CVPR | BASNet:边缘感知的显著性物体检测