Atcoder 题面传送门 & 洛谷题面传送门

无穷级数求和的简单题,稍微写写吧,正好也算帮我回忆下组合数这一块的内容。

首先我们不妨假设 A 赢,B 赢的情况就直接镜像一下即可。我们枚举 B 在 A 赢之前赢了多少局,设为 \(j\),由于题目规定只要有人赢的局数到达 \(n\) 就停止,因此最后一场比赛必须是 A 赢,而前面相当于在 \(n-1+j\) 个场次中选择 \(n-1\) 场留给 A 赢,剩余留给 B 赢,方案数 \(\dbinom{n-1+j}{n-1}\),而 A 赢 \(n\) 场的概率为 \(A^n\),B 赢 \(j\) 场的概率为 \(B^j\),因此这部分的概率为 \(\dbinom{n-1+j}{n-1}\times A^n\times B^j\)。

接下来考虑平局的问题,按照套路我们枚举有多少次平局,设为 \(i\),显然 \(i\) 场平局的概率为 \(C^i\),而将 \(i\) 场平局插入原本 \(n-1+j\) 场分出胜负的比赛,根据隔板法可知方案数为 \(\dbinom{n-1+j+i}{i}\),最后乘上个比赛次数 \(i+j+n\) 就是期望,因此我们可以初步得到答案的表达式:

\[ans_A=\sum\limits_{j=0}^{n-1}\dbinom{n-1+j}{n-1}\times A^n\times B^j\sum\limits_{i=0}^{\infty}C^i\dbinom{n-1+j+i}{i}\times(n+j+i)
\]

由于这是个无穷级数,无法直接求和,需将其转化为封闭形式后再计算。注意到后面的 \(\sum\limits_{i=0}^{\infty}C^i\dbinom{n-1+j+i}{i}\times(n+j+i)\),如果不看那个 \(\times(n+j+i)\),是非常容易转化为封闭形式的,根据生成函数的知识它就是 \(\dfrac{1}{(1-C)^{n+j}}\),重点在于后面的 \(\times(n+j+i)\) 怎样处理,一个想法是将 \(n+j+i\) 拆成 \(n+j\) 和 \(i\),前面的 \(\sum\limits_{i=0}^{\infty}C^i\dbinom{n-1+j+i}{i}\times(n+j)\) 相当好处理,直接乘个 \(n+j\) 即可,但是 \(\sum\limits_{i=0}^{\infty}C^i\dbinom{n-1+j+i}{i}\times i\) 比较棘手,我花费了九牛二虎之力找这东西的封闭形式,xtbz,果然 wtcl 了啊(

注意到 \((n+j+i)\) 与前面二项式系数的 \(n-1+j+i\) 只差一个 \(1\),因此很容易联想到吸收恒等式 \(\dbinom{n}{k}\times k=\dbinom{n-1}{k-1}\times n\),但是如果直接化后面还是会多出个 \(i\),等于啥都没干,不过显然 \(\dbinom{n-1+j+i}{i}=\dbinom{n-1+j+i}{n+j-1}\),而 \(\dbinom{n-1+j+i}{n+j-1}\times(n+j+i)=\dbinom{n+j+i}{n+j}\times(n+j)=\dbinom{n+j+i}{i}\times(n+j)\),故 \(\sum\limits_{i=0}^{\infty}C^i\dbinom{n-1+j+i}{i}\times(n+j+i)=\sum\limits_{i=0}^{\infty}C^i\dbinom{n+j+i}{i}\times(n+j)\),噫,好,\(i\) 没了,这下就可以直接套公式求和了,故:

\[ans_A=\sum\limits_{j=0}^{n-1}\dbinom{n-1+j}{n-1}\times A^n\times B^j\times\dfrac{1}{(1-C)^{n+j+1}}\times(n+j)
\]

随便算一下即可,时间复杂度 \(\mathcal O(n)/\mathcal O(n\log n)\),取决于你怎么实现。

最后,无限 orz ycx,他的方法比我不知道简便到哪里去了 !!!11

const int MAXN=2e5;
const int INV100=5.7e8+4;
const int MOD=1e9+7;
int qpow(int x,int e){
int ret=1;
for(;e;e>>=1,x=1ll*x*x%MOD) if(e&1) ret=1ll*ret*x%MOD;
return ret;
}
int n,A,B,C,fac[MAXN*2+5],ifac[MAXN*2+5];
void init_fac(int n){
fac[0]=ifac[0]=ifac[1]=1;
for(int i=2;i<=n;i++) ifac[i]=1ll*ifac[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%MOD,ifac[i]=1ll*ifac[i-1]*ifac[i]%MOD;
}
int binom(int x,int y){return 1ll*fac[x]*ifac[y]%MOD*ifac[x-y]%MOD;}
int main(){
scanf("%d%d%d%d",&n,&A,&B,&C);
A=1ll*A*INV100%MOD;B=1ll*B*INV100%MOD;C=1ll*C*INV100%MOD;
init_fac(n*2);C=qpow(MOD+1-C,MOD-2);int ans=0;
// printf("%d %d %d\n",A,B,C);
for(int i=0;i<n;i++){
ans=(ans+1ll*binom(n-1+i,n-1)*qpow(A,n)%MOD*qpow(B,i)%MOD*qpow(C,n+i+1)%MOD*(n+i))%MOD;
ans=(ans+1ll*binom(n-1+i,n-1)*qpow(B,n)%MOD*qpow(A,i)%MOD*qpow(C,n+i+1)%MOD*(n+i))%MOD;
} printf("%d\n",ans);
return 0;
}

Atcoder M-SOLUTIONS Programming Contest C - Best-of-(2n-1)(无穷级数求和+组合恒等式)的更多相关文章

  1. AtCoder SoundHound Inc. Programming Contest 2018 E + Graph (soundhound2018_summer_qual_e)

    原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-SoundHound-Inc-Programming-Contest-2018-E.html 题目 ...

  2. AtCoder diverta 2019 Programming Contest 2

    AtCoder diverta 2019 Programming Contest 2 看起来我也不知道是一个啥比赛. 然后就写写题解QWQ. A - Ball Distribution 有\(n\)个 ...

  3. 【AtCoder】M-SOLUTIONS Programming Contest

    M-SOLUTIONS Programming Contest A - Sum of Interior Angles #include <bits/stdc++.h> #define fi ...

  4. 【AtCoder】AISing Programming Contest 2019

    本来以为是1199rated的..仔细一看发现是1999,所以就做了一下 这场涨分很轻松啊...为啥又没打 等pkuwc考完我一定打一场atcoder(咕咕咕,咕咕咕,咕咕咕咕咕咕咕~) 但是其实我思 ...

  5. Atcoder ZONe Energy Programming Contest C - MAD TEAM(二分)

    文章目录 题面 Sample Input Sample output 题解 CODE 别的做法 暴力 Dynamic Programming 题面 你想从 N N N 个候选人中选 3 个人. 每个人 ...

  6. 【AtCoder】Yahoo Programming Contest 2019

    A - Anti-Adjacency K <= (N + 1) / 2 #include <bits/stdc++.h> #define fi first #define se se ...

  7. 【AtCoder】KEYENCE Programming Contest 2019

    A - Beginning 这个年份恐怕需要+2 #include <bits/stdc++.h> #define fi first #define se second #define p ...

  8. 【AtCoder】Dwango Programming Contest V题解

    A - Thumbnail 题意简述:给出N个数,找出N个数中和这N个数平均值绝对值最小的数 根据题意写代码即可= = #include <bits/stdc++.h> #define f ...

  9. [AtCoder] NIKKEI Programming Contest 2019 (暂缺F)

    [AtCoder] NIKKEI Programming Contest 2019   本来看见这一场的排名的画风比较正常就来补一下题,但是完全没有发现后两题的AC人数远少于我补的上一份AtCoder ...

随机推荐

  1. javascript-jquery介绍

    jquery优势 1.轻量级 2.强大的选择器 3.出色的DOM封装 4.可靠的事件处理机制 5.完善的Ajax 6.不污染顶级变量 7.出色的浏览器兼容 8.链式操作方式 9.隐式迭代 10.行为层 ...

  2. MySQL:基础语法-1

    MySQL:基础语法-1 记录一下 MySQL 基础的一些语法,便于查询,该部分内容主要是参考:bilibili 上 黑马程序员 的课程而做的笔记,由于时间有点久了,课程地址忘记了 关于数据库的安装操 ...

  3. 百度OCR技术博客

    百度OCR工具链使用 百度OCR的API使用总体来说比较容易,主要步骤为:注册云平台并登录,选择服务并创建应用,保存API Key以及Secret Key,选择调用API. 注册登录百度云平台 首先需 ...

  4. Asp.CAore往Vue前端传application/octet-stream类型文件流

    题外话:当传递文件流时要确定文件流的类型,但也有例外就是application/octet-stream类型,主要是只用来下载的类型,这个类型简单理解意思就是通用类型类似 var .object.ar ...

  5. 无网络下,配置yum本地源

    1. 新建一个没有iso镜像文件的虚拟机: 2. 本地上传一个镜像文件(CentOS7的镜像),到虚拟机已创建的目录: 例如:上传一个镜像文件CentOS-7-x86_64-Everything-17 ...

  6. 2021.8.13考试总结[NOIP模拟38]

    T1 a 入阵曲.枚举矩形上下界,之后从左到右扫一遍.用树状数组维护前缀和加特判可以$A$,更保险要脸的做法是双指针扫,因为前缀和单调不减. $code:$ 1 #include<bits/st ...

  7. 嵌入式物联网之SPI接口原理与配置

    本实验采用W25Q64芯片 W25Q64是华邦公司推出的大容量SPI FLASH产品,其容量为64Mb.该25Q系列的器件在灵活性和性能方面远远超过普通的串行闪存器件.W25Q64将8M字节的容量分为 ...

  8. sort方法和自定义比较器的写法

    摘要 在做一些算法题时常常会需要对数组.自定义对象.集合进行排序. 在java中对数组排序提供了Arrays.sort()方法,对集合排序提供Collections.sort()方法.对自定义对象排序 ...

  9. 【代码更新】单细胞分析实录(20): 将多个样本的CNV定位到染色体臂,并画热图

    之前写过三篇和CNV相关的帖子,如果你做肿瘤单细胞转录组,大概率看过: 单细胞分析实录(11): inferCNV的基本用法 单细胞分析实录(12): 如何推断肿瘤细胞 单细胞分析实录(13): in ...

  10. X264编码测试验证

    之前在做一个rtsp直播需求,其中一个方案是要用的x264来对摄像头数据进行实时编码推流,摄像头帧率是25fps,为了验证方案的可行性,先对x264的编码速度进行一个测试研究,再确认是否要采用此方案. ...