Solution -「CF 908D」New Year&Arbitrary Arrangement
\(\mathcal{Description}\)
Link.
给定 \(n,p_a,p_b\),初始有一个空串,每次操作有 \(\frac{p_a}{p_a+p_b}\) 的概率在其后添加字符 \(\texttt{'a'}\),\(\frac{p_b}{p_a+p_b}\) 的概率添加字符 \(\texttt{'b'}\),当子序列 \(\{\texttt{'a'},\texttt{'b'}\}\) 的个数不小于 \(n\) 时,结束操作。求子序列的期望个数,对 \(10^9+7\) 取模。
\(n\le1000\)。
\(\mathcal{Solution}\)
显然状态,\(f(i,j)\) 表示有 \(i\) 个 \(\texttt{'a'}\),\(j\) 个 \(\{\texttt{'a'},\texttt{'b'}\}\) 的期望串长。为方便转移,令 \(p_a\) 为出现 \(\texttt{'a'}\) 的概率,\(p_b\) 同理。对于一般情况的转移:
\]
当 \(i+j\ge n\),若再出现一个 \(\texttt{'b'}\),操作必然停止。那么:
f(i,j)&=p_b\sum_{k=0}^{+\infty}p_a^k(i+j+k)\\
p_af(i,j)&=p_b\sum_{k=1}^{+\infty}p_a^k(i+j+k-1)\\
(1-p_a)f(i,j)&=p_b\left(i+j+\sum_{k=1}^{+\infty}p_a^k\right)\\
p_bf(i,j)&=p_b\left(i+j+\frac{p_a}{p_b}\right)\\
f(i,j)&=i+j+\frac{p_a}{p_b}
\end{aligned}
\]
而初始状态有:
f(0,0)&=p_af(1,0)+p_bf(0,0)\\
&=\frac{p_a}{1-p_b}f(1,0)\\
&=f(1,0)
\end{aligned}
\]
DP 就好了 w。
\(\mathcal{Code}\)
#include <cstdio>
#include <cstring>
typedef long long LL;
const int MAXN = 1000, MOD = 1e9 + 7;
int n, pa, pb, div, f[MAXN + 5][MAXN + 5];
inline int add ( int a, const int b ) { return ( a += b ) < MOD ? a : a - MOD; }
inline int mul ( LL a, const int b ) { return ( a *= b ) < MOD ? a : a % MOD; }
inline int sub ( int a, const int b ) { return ( a -= b ) < 0 ? a : a + MOD; }
inline int qkpow ( int a, int b ) {
int ret = 1;
for ( ; b; a = mul ( a, a ), b >>= 1 ) ret = mul ( ret, b & 1 ? a : 1 );
return ret;
}
inline int solve ( const int a, const int k ) {
if ( a + k >= n ) return add ( a, add ( k, div ) );
if ( ~ f[a][k] ) return f[a][k];
return f[a][k] = add ( mul ( pa, solve ( a + 1, k ) ), mul ( pb, solve ( a, a + k ) ) );
}
int main () {
int ta, tb;
scanf ( "%d %d %d", &n, &ta, &tb );
memset ( f, -1, sizeof f );
pa = mul ( ta, qkpow ( add ( ta, tb ), MOD - 2 ) );
pb = mul ( tb, qkpow ( add ( ta, tb ), MOD - 2 ) );
div = mul ( pa, qkpow ( pb, MOD - 2 ) );
printf ( "%d\n", solve ( 1, 0 ) );
return 0;
}
Solution -「CF 908D」New Year&Arbitrary Arrangement的更多相关文章
- Solution -「CF 1342E」Placing Rooks
\(\mathcal{Description}\) Link. 在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...
- Solution -「CF 1622F」Quadratic Set
\(\mathscr{Description}\) Link. 求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...
- Solution -「CF 923F」Public Service
\(\mathscr{Description}\) Link. 给定两棵含 \(n\) 个结点的树 \(T_1=(V_1,E_1),T_2=(V_2,E_2)\),求一个双射 \(\varph ...
- Solution -「CF 923E」Perpetual Subtraction
\(\mathcal{Description}\) Link. 有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机 ...
- Solution -「CF 1586F」Defender of Childhood Dreams
\(\mathcal{Description}\) Link. 定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...
- Solution -「CF 1237E」Balanced Binary Search Trees
\(\mathcal{Description}\) Link. 定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: ...
- Solution -「CF 623E」Transforming Sequence
题目 题意简述 link. 有一个 \(n\) 个元素的集合,你需要进行 \(m\) 次操作.每次操作选择集合的一个非空子集,要求该集合不是已选集合的并的子集.求操作的方案数,对 \(10^9 ...
- Solution -「CF 1023F」Mobile Phone Network
\(\mathcal{Description}\) Link. 有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权 ...
- Solution -「CF 599E」Sandy and Nuts
\(\mathcal{Description}\) Link. 指定一棵大小为 \(n\),以 \(1\) 为根的有根树的 \(m\) 对邻接关系与 \(q\) 组 \(\text{LCA}\ ...
随机推荐
- 用一道题 来 复习 MySQL 的 复杂 sql 语句
1.前言 太久没有在数据库做一些复杂的sql了,基本上将数据库的查询逻辑全放在了Java里做, 一来呢,可以减轻数据库的负担,二来呢,在java写,逻辑感会更强,数据类型更丰富也容易操作. 然而... ...
- 前端 vue 等刷新清浏览器缓存的方法
vue开发过程中发现内存一直往上飙,360时不时的提示下清理内存,测试发现每刷新一次页面内存就增加1%. 清掉浏览器的缓存等各种数据以后内存明显变小,刷新页面导致内存爆表. 这种问题着实不应该存在,记 ...
- SYCOJ2205超级百钱百鸡
题目-超级百钱百鸡 (shiyancang.cn) 百钱百鸡的加强版 百钱百鸡的话,因为是有范围,所以挨个挨个尝试即可,确定两个,即可确定第三个. 超级百钱百鸡,通过题目的描述,最后可以得到一个二元的 ...
- 使用Crossplane构建专属PaaS体验:Kubernetes,OAM和CoreWorkflows
关键点:•许多组织的目标是构建自己的云平台,这些平台通常由内部部署架构和云供应商共建完成.•虽然Kubernetes没有提供开箱即用的完整PaaS平台式服务,但其具备完整的API,清晰的技术抽取和易理 ...
- Linux环境下的Docker的安装和部署、学习二
DockerFile体系结构(保留字指令) FROM:基础镜像,当前新镜像是基于哪个镜像的 MAINTAINER:镜像维护者的姓名和邮箱地址 RUN:容器构建时需要运行的命令 EXPOSE:当前容器对 ...
- Protobuf使用--go和C#
一.Go安装及使用protobuf工具 以下都是基于Linux系统: 1.安装 A) protobuf 编译工具安装 1.下载 protoBuf: cd $GOPATH/src/ git clone ...
- Java 将PDF转为PDF/A
通过将PDF格式转换为PDF/A格式,可保护文档布局.格式.字体.大小等不受更改,从而实现文档安全保护的目的,同时又能保证文档可读.可访问.本篇文章,将通过Java后端程序代码展示如何将PDF转为符合 ...
- [Jetson Nano]Jetson Nano快速入门
NVIDIAJetsonNano开发套件是适用于制造商,学习者和开发人员的小型AI计算机.相比Jetson其他系列的开发板,官方报价只要99美金,可谓是相当有性价比.本文如何是一个快速入门的教程,主要 ...
- for in 遍历对象
如果直接写car.key会输出undefined,下面的注释是浏览器运行的原理,浏览器最终都是以car["key"]的方式来查找数据的
- gin中的query和postform用法
package main import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() // Que ...