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

泰拳警告

  • 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 × 106p = 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 : 上来直接搞大DPDPDPdpi,j:dp_{i,j}:dpi,j: 赢了iii场,输了jjj场的概率,自然就平了n−i−jn-i-jnij

枚举每一场是赢了还是输了甚至于平了,这是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,jp+212dpi+1,j

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

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

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

case 5~8 : n≤105n\le 10^5n105,没有特殊性质,应该是拿来给选手被卡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)nk

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

C(n,k)∗C(n−k,i)C(n,k)*C(n-k,i)C(n,k)C(nk,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>nkii(2nk,nk]

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

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

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

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

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

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

/0123456
01202^020
111212^121
2121222^222
31331232^323
414641242^424
515101051252^525
61615201561262^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-knk的奇偶直接算

这中间设计逆元,幂等,需要预处理后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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模板:wqs二分

所谓wqs&#xff0c;就是windwhisper说&#xff1a;“qs” &#xff08;逃&#xff09; 解析 很神奇的科技。 四两拨千斤的解决一些本来可能不太好解决的问题。 经典模型&#xff1a;有若干个物品&#xff0c;要求选出 mmm 个&#xff0c;选的时候带有限制&#xff0c;求最优…

EF Core中避免贫血模型的三种行之有效的方法(翻译)

[Paul Hiles: 3 ways to avoid an anemic domain model in EF Core &#xff1a;https://www.devtrends.co.uk/blog/3-ways-to-avoid-an-anemic-domain-model-in-ef-core]1.引言在使用ORM中&#xff08;比如Entity Framework&#xff09;贫血领域模型十分常见 。本篇文章将先探…

[ONTAK2010] Peaks加强版 (kruskal重构树+主席树+倍增)

Peaksdescriptionsolutioncodedescription 在Bytemountains有N座山峰&#xff0c;每座山峰有他的高度h_i 有些山峰之间有双向道路相连&#xff0c;共M条路径&#xff0c;每条路径有一个困难值&#xff0c;这个值越大表示越难走 现在有Q组询问&#xff0c;每组询问询问从点v开…

洛谷P2754:[CTSC1999]家园 / 星际转移问题(网络流)

解析 容易想到对每个时间的空间站都建一个点。 然后发现循环问题很难搞。 然后我就一直想从 lcm 下文章&#xff0c;结果 lcm 可以到3e5&#xff0c;于是就寄了… qwq 注意到本题的数据范围极小&#xff01; 那个3e5云云是不可能跑出来的&#xff0c;事实上&#xff0c;答案不…

Saving Beans HDU - 3037(卢卡斯定理)

Saving Beans HDU - 3037&#xff08;卢卡斯定理&#xff09; 题意&#xff1a; 他们想知道有多少种方法可以在n树中保存不超过m个bean&#xff08;它们是相同的&#xff09;。 现在他们求助于你&#xff0c;你应该给他们答案。 结果可能非常巨大; 你应该输出模p的结果&…

我们为什么要搞长沙.NET技术社区(三)

我们为什么要搞长沙.NET技术社区&#xff08;三&#xff09; 小饭局搞事情先从饭局开始是中华民族的优良传统。昨天晚餐时间&#xff0c;长沙 .net 技术社区的主要发起人员进行了一番小聚&#xff0c;同时也作为一个非正式会议&#xff0c;对社区发展进行了探讨。从介绍自己对于…

BZOJ4504. K个串(主席树+优先队列)

4504. K个串descriptionsolutioncodedescription 兔子们在玩k个串的游戏。首先&#xff0c;它们拿出了一个长度为n的数字序列&#xff0c;选出其中的一 个连续子串&#xff0c;然后统计其子串中所有数字之和&#xff08;注意这里重复出现的数字只被统计一次&#xff09;。 兔…

【招聘(北京)】北森测评招聘 .NET 架构师、高级工程师

工作职责公司核心产品的迭代需求分析设计开发。公司核心产品的线上维护和性能调优。对初中级技术人员培养和质量把关。编写软件设计和技术文档。任职资格为人正直、诚信、责任心强&#xff0c;能承受较大工作压力。强烈的目标导向意识&#xff0c;逻辑思维清晰&#xff0c;执行…

网络流模型与技巧总结

文章目录前言常见基本模型最大匹配、最小点覆盖和最大独立集构造最小点覆盖最大点权匹配最小路径覆盖不可重覆盖可重覆盖最大权闭合子图建图技巧利用拆点进行限流利用断边表示决策利用虚点表示组合关系链状模型用链表示时间轴用链表示偏序关系形式的选取限制通过拆点描述先后顺…

卢卡斯定理 Lucas

参考文章 详细定义内容看这个参考文章 结论&#xff1a; 模板&#xff1a; Lucas函数&#xff1a; long long Lucas(long long n,long long m){if(m0) return 1;return Lucas(n/p,m/p)*C(n%p,m%p)%p; }组合数函数&#xff1a; 此处求逆元的用的bp-2 long long C(long long…

BZOJ #2874. 训练士兵(差分+离散化+主席树)

BZOJ #2874. 训练士兵descriptionsolutioncodedescription Ryz正在着手于训练一批精锐士兵 Ryz手下有n*m个士兵&#xff0c;排成一个n行m列的方阵。在一天中&#xff0c;ryz会对士兵下达一些命令&#xff0c;每个命令作用于一个小方阵的所有士兵&#xff0c;并且会增加他们的…

VS 2019 要来了,是时候了解一下 C# 8.0 新功能

近日&#xff0c;微软发布了 Visual Studio 2019 的发布日期&#xff0c;2019 年 4 月 2 日 Visual Studio 2019 将正式和大家见面&#xff0c;同时微软还将提供发布现场实时直播。除了 Visual Studio 2019 自身之外&#xff0c;VS 2019 的发布还牵动着很多 C# 开发者的心。虽然…

[蓝桥杯2020国赛]游园安排

题目&#xff1a; 题解&#xff1a; 本质就是求最长上升子序列&#xff0c;只不过这里是字符串版本的&#xff0c;我们都知道有n^2的LIS&#xff0c;但其实还有O(nlogn)版本的&#xff0c;详细看这里&#xff0c;套上就行 另外我发现这里竟然有蓝桥杯全套的编程题离谱&#xf…

洛谷P2761:软件补丁问题(状压、分层图最短路)

当遇到瓶颈时&#xff0c;想想自己是否做了可以优化的无用功。 解析 不难想到状压最短路的做法。 但是直接加边的话边数会是 O(m2n)O(m2^n)O(m2n) 级别&#xff0c;只有 909090 分&#xff0c;难以通过。 注意到&#xff0c;由于补丁很少&#xff0c;真正能达到的状态是很有限…

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

万猪拱塔descriptionsolutioncodedescription 题目描述 小七养了很多头猪&#xff0c;它们分布在 n 行 m 列中&#xff0c;其中第 i 行第 j 列的猪圈养的是第 wi,jw_{i,j}wi,j​ 种猪。 小七有时会选择一个子矩形范围内的猪圈进行巡视&#xff0c;如果该子矩形包含 i 行 j 列 …

重新解读DDD领域驱动设计(一)

回顾十年前&#xff0c;还未踏入某校时&#xff0c;便听闻某学长一毕业就入职北京某公司&#xff0c;月薪过万。对于一个名不见经传的小学院&#xff0c;一毕业能拿到这个薪水还是非常厉害的。听闻他学生期间参与开发了一款股票软件&#xff0c;股票那时正迎来一波疯涨。时也运…

Tickets HDU - 1260

Tickets HDU - 1260 题意&#xff1a; 著名的宫崎骏动画片《千与千寻》在中传1500报重映&#xff0c;中传学子有幸成为全国第一批观众。动画学院学生会负责给大家发票&#xff0c;所有的中传同学只要把中传首映《千与千寻》的推送信息发到朋友圈并集够10个赞&#xff0c;就可…

洛谷P3357:最长k可重线段集问题(网络流)

解析 本题的建模方法有很多&#xff0c;我的做法是补集思想转化成志愿者招募然后按照那道题的做法直接做&#xff0c;看题解更多是采用的对于不冲突的线段首尾加边的做法。 在前一道最长k可重区间问题中这两种做法谈不上孰优孰劣&#xff0c;但本题中题解的做法在处理垂直线段…

程序员修神之路--高并发优雅的做限流(有福利)

点击上方蓝色字体&#xff0c;关注我们菜菜哥&#xff0c;有时间吗&#xff1f;YY妹&#xff0c;什么事&#xff1f;我最近的任务是做个小的秒杀活动&#xff0c;我怕把后端接口压垮&#xff0c;X总说这可关系到公司的存亡简单呀&#xff0c;你就做个限流呗这个没做过呀&#x…

BZOj #4771. 七彩树(主席树+dfn序+lca)

BZOj #4771. 七彩树descriptionsolutioncodedescription 给定一棵n个点的有根树&#xff0c;编号依次为1到n&#xff0c;其中1号点是根节点。每个节点都被染上了某一种颜色&#xff0c;其中第i个节点的颜色为c[i]。如果c[i]c[j]&#xff0c;那么我们认为点i和点j拥有相同的颜色…