泰拳警告

  • description
  • solution
  • code

description

题目描述
小七擅长泰拳,某天他打算与小枣切磋拳技,一共需要进行 n 次比赛。
由于双方拳技难分上下,每场比赛小七获胜或落败的概率都是 1/p+2 ,平局的概率是 p/p+2
若最后小七获胜场数大于落败场次,且平局次数为 k ,则能获得 k + 1 奖励分
小七想知道,他能获得的奖励分的期望是多少呢?为了避免精度误差,你需要输出答案在模 998244353 意义下的结果

输入格式
输入文件 fight.in 包含一行,输入两个正整数依次表示 n; p
输出格式
输出文件 fight.out 包含一行,仅一个非负整数,表示答案在模 998244353 意义下的结果

样例输入
2 1
样例输出
221832079

样例解释
两局都胜,或胜一局平一局是合法的,期望得分为 1/3 × 1/3 ×1+2× 1/3 × 1/3 ×2 = 5/9,在模 998244353 意义下为 221832079

数据范围及约定

测试点编号 n 特殊性质
1 ∼ 4 ≤ 2000
5 ∼ 8 ≤ 105
9 ∼ 12 ≤ 3 × 106 p = 1
13 ∼ 20 ≤ 3 × 106

对于 100% 的数据,满足 1 ≤ n ≤ 3 × 106; 1 ≤ p < 998244351 。可以证明答案一定能表示成一个既约分数 u/v,你需要找到满足 v × w ≡ 1 mod 998244353的自然数 w ,输出 u × w mod 998244353

solution

case 0 : 上来直接搞大DPDPDP,dpi,j:dp_{i,j}:dpi,j​: 赢了iii场,输了jjj场的概率,自然就平了n−i−jn-i-jn−i−j场

枚举每一场是赢了还是输了甚至于平了,这是O(n3)O(n^3)O(n3)的,连最基础的测试点都不能拿到

case 1~4 :猜测改写dpi,j:dp_{i,j}:dpi,j​: 在第iii轮为止平了jjj的概率,将胜场和负场合并在一起

dpi,j∗1p+2∗2→dpi+1,jdp_{i,j}*\frac{1}{p+2}*2\rightarrow dp_{i+1,j}dpi,j​∗p+21​∗2→dpi+1,j​

dpi,j∗pp+2→dpi+1,j+1dp_{i,j}*\frac{p}{p+2}\rightarrow dp_{i+1,j+1}dpi,j​∗p+2p​→dpi+1,j+1​

最后平了kkk场的方案数,如果胜了iii,负了jjj;则一定对应有一种胜了jjj,负了iii,看似/2/2/2就行了,总是恰好有一种胜场大于负场

但是如果i=j,就都不能取,单独减掉

case 5~8 : n≤105n\le 10^5n≤105,没有特殊性质,应该是拿来给选手被卡log的安慰

case 9~12 : p=1p=1p=1,意味着胜负平都是一样的概率,应该可以利用数学方法计算

case 13~20 :最后就是正解了,私以为还是p=1的数据提供了可以数学计算的灵感

枚举平了kkk场,因为胜负的概率一样,所以平了kkk场的每种情况概率都是一样的

(pp+2)k⋅(1p+2)n−k(\frac{p}{p+2})^k·(\frac{1}{p+2})^{n-k}(p+2p​)k⋅(p+21​)n−k

每种可能其实相当于在nnn个位置中,选kkk个为止为平,选iii个位置为胜,剩下自然就是负

C(n,k)∗C(n−k,i)C(n,k)*C(n-k,i)C(n,k)∗C(n−k,i)

这里一旦枚举iii就又变成n2n^2n2了

考虑iii的限制,胜场大于负场,即i>n−k−i⇒i∈(n−k2,n−k]i>n-k-i\Rightarrow i\in(\frac{n-k}{2},n-k]i>n−k−i⇒i∈(2n−k​,n−k]

随着kkk的枚举,计算的iii范围也要变化,C(n−k,i)C(n-k,i)C(n−k,i)似乎不能通过求和然后乘以一个分数转移到下一个kkk,也就省不掉

考试时,在这里我陷入了僵局

思索许久无果后,我想起了与组合系数紧密相连的杨辉三角

iii的范围对应在上面是一段后缀区间,斜着的不对齐,不能直观冲击我的数学左脑

于是乎,我果断选择枚举负场次数i

这样在杨辉三角里面就是一段左对齐的区间选址

/ 0 1 2 3 4 5 6
0 1 202^020
1 1 1 212^121
2 1 2 1 222^222
3 1 3 3 1 232^323
4 1 4 6 4 1 242^424
5 1 5 10 10 5 1 252^525
6 1 6 15 20 15 6 1 262^626

杨辉三角有太多的性质了

  • 第iii行的和为2i2^i2i
  • 每一行是对称的

这两个性质便是去掉一个nnn复杂度的关键

因为负场是不到一半的

e.g. 胜负场666,负场可能为0/1/20/1/20/1/2,在杨辉三角中就是减去1+6+151+6+151+6+15

这等于先减去中间的C(i,i2)C(i,\frac{i}{2})C(i,2i​),再除以二

e.g.胜负场555,负场可能为0/1/20/1/20/1/2,直接减去Z总和的一半

所以说负场iii的贡献可以根据n−kn-kn−k的奇偶直接算

这中间设计逆元,幂等,需要预处理后O(1)O(1)O(1)调用

卡的就是懒人非要在计算时反复算快速幂的log⁡\loglog

code

#include <cstdio>
#define mod 998244353
#define int long long
#define maxn 3000005
int n, p;
int fac[maxn], inv[maxn], mi_2[maxn], Inv[maxn];int qkpow( int x, int y ) {int ans = 1;while( y ) {if( y & 1 ) ans = ans * x % mod;x = x * x % mod;y >>= 1;}return ans;
}void init() {fac[0] = inv[0] = 1;for( int i = 1;i <= n;i ++ )fac[i] = fac[i - 1] * i % mod;inv[n] = qkpow( fac[n], mod - 2 );for( int i = n - 1;i;i -- )inv[i] = inv[i + 1] * ( i + 1 ) % mod;mi_2[0] = Inv[0] = 1; int mi = 1;for( int i = 1;i <= n;i ++ ) {mi_2[i] = mi_2[i - 1] * 2 % mod;mi = mi * ( p + 2 ) % mod;}Inv[n] = qkpow( mi, mod - 2 );for( int i = n - 1;i;i -- )Inv[i] = Inv[i + 1] * ( p + 2 ) % mod;
}int C( int n, int m ) {return fac[n] * inv[m] % mod * inv[n - m] % mod;
}signed main() {freopen( "fight.in", "r", stdin );freopen( "fight.out", "w", stdout );scanf( "%lld %lld", &n, &p );init();int ans = 0, Inv2 = qkpow( 2, mod - 2 ), mi_p = 1;for( int i = 0;i < n;i ++ ) { //平i场 int t = mi_p * Inv[i] % mod * Inv[n - i] % mod * C( n, i ) % mod;int k; //枚举负场 if( ( n - i ) & 1 ) //胜场+负场=奇数 n-ik = mi_2[n - i - 1];elsek = ( mi_2[n - i] - C( n - i, ( n - i ) >> 1 ) + mod ) % mod * Inv2 % mod;ans = ( ans + k * t % mod * ( i + 1 ) ) % mod;mi_p = mi_p * p % mod;}printf( "%lld\n", ans );return 0;
}

[2020-09-11 CQBZ/HSZX多校联测 T2] 泰拳警告(组合数+数学期望)相关推荐

  1. [2020-09-11 CQBZ/HSZX多校联测 T3] 万猪拱塔(线段树+巧妙转化)

    万猪拱塔 description solution code description 题目描述 小七养了很多头猪,它们分布在 n 行 m 列中,其中第 i 行第 j 列的猪圈养的是第 wi,jw_{i ...

  2. [2021-09-11 CQBZ/HSZX多校联考 T1] 茅山道术 (后缀和优化dp)

    茅山道术 description solution code description 题目描述 小七擅长茅山道术,有一天他发现了 n 个排成一行的宝石,其中第 i 个宝石 有一个颜色 ci . 小七决 ...

  3. 搜索引擎(2020.09.11)

    搜索引擎 国内方面 必应 百度 搜狗 海外方面 谷歌 雅虎 未完待续--

  4. 软件测评师知识点(2020.09.11)

    功能性的子特性 功能性包括的子特性有适合性.准确性.互操作性.安全保密性.功能依从性. 判定表 一个条件有两种判定:即真/假 一个条件两种,两个条件四种,三个条件八种 所以n个条件可以得到最多 2^n ...

  5. 历代华为Mate系列主要参数对比,更新于2020年11月

    历代华为Mate系列主要参数对比 华为Mate系列定位 商务旗舰,相比P系列要晚半年上市,系统和配置上更占优势.是当之无愧的华为手机一哥. 按年份排序 序 型号 年份 处理器 运存 存储 屏幕 摄像头 ...

  6. 一篇文章足够你学习蓝牙技术,提供史上最全的蓝牙技术(传统蓝牙/低功耗蓝牙)文章总结,文档下载总结(2020/12/11更新)

    本文章目的: 1)给广大蓝牙爱好者提供蓝牙资料下载渠道 2)给广大蓝牙爱好者增加一个蓝牙学习文章导读 我们的蓝牙书以及CSDN蓝牙系列的书籍以及视频有以下计划,大家可以根据兴趣爱好或者工作需要挑选特定 ...

  7. 【财经期刊FM-Radio|2020年11月24日】

    title: [财经期刊FM-Radio|2020年11月24日] 微信公众号: 张良信息咨询服务工作室 [今日热点新闻一览↓↓] 美股走出一周低谷,布油创八个月新高,金银大跌,苹果跌近3%,特斯拉和 ...

  8. RDKit | 基于RDKit(≥2020.09.1)的相似图绘制新方法

    导入库 from rdkit import Chem from rdkit.Chem import Draw from rdkit.Chem.Draw import SimilarityMaps fr ...

  9. 2020 年 11 月程序员工资统计,Java 市场占有率仍第一

    如果问你最成功的和最流行的编程语言是什么?你肯定回答 Java. 2020 年 11 月 中国大陆编程语言排行显示,Java 程序员招聘需求达 13 万人,占27.8%,市场占有率位居第一. 图片来源 ...

最新文章

  1. 用NumPy genfromtxt导入数据
  2. uniapp中radio颜色渐变
  3. python与excel做数据可视化-Python的Excel操作及数据可视化
  4. 一些在线的WebEdit编辑器
  5. keytool 错误: java.io.IOException: Keystore was tampered with, or password was incorrect
  6. 海量 GPU 等你来,OpenMMLab 岗位全开!
  7. (转)PowerDesigner教程系列(二)概念数据模型
  8. AE开发 创建Feature后,需要进行拓扑检查
  9. 苹果A14芯片组件曝光,iPhone 12发布不远了?
  10. Fibonacci (hdu1568)数学公式
  11. 控制台的左侧显示证书树形列表_一款免费签发Https证书的工具:Let's Encrypt
  12. 《机器学习实战》学习笔记第二章 —— K-近邻算法
  13. 20190904_chip-seq/ ATAC-seq/DAP-seq 原理理解
  14. 全球与中国具有集成保护功能的共模滤波器(CMF)市场深度研究分析报告
  15. Linux内核4.14版本:ARM64的内核启动过程(一)——start_kernel之前
  16. 创客(米思奇编程)-03-传感器
  17. Python教程(十)--if 实例运用(棒子老虎鸡游戏)
  18. C#框架设计之浅谈SOA与钝化模式
  19. 高并发基础之Java并发包
  20. Android-Handle详解

热门文章

  1. 年底求职难?起薪28万的数据岗位,人才缺口达150万,不限专业学历……
  2. 从Google Maglev说起,如何造一个牛逼的负载均衡?
  3. 荐书 | 攻克世纪难题,拒绝领取菲尔兹奖的孤独数学天才的一生
  4. 从生物神经网络到人工神经网络
  5. 【干货】机器学习中样本比例不平衡的处理方法
  6. Boosting集合算法详解(一)
  7. slider节点透明背景_【Cocos Creator 实战教程(1)】——人机对战五子棋(节点事件相关)...
  8. bootstrap的表单验证 vue_第45天:Web表单
  9. python的matplotlib库内的函数_如何在matplotlib中找到函数下面的区域?
  10. python数据抓取课程_Python爬虫入门教程 21-100 网易云课堂课程数据抓取