Solution -「CF 1392H」ZS Shuffles Cards
\(\mathcal{Description}\)
Link.
打乱的 \(n\) 张编号 \(1\sim n\) 的数字排和 \(m\) 张鬼牌。随机抽牌,若抽到数字,将数字加入集合 \(S\);否则,还原牌堆(但不清空 \(S\))。若 \(S=[1,n]\) 且抽到鬼牌时结束抽牌。求期望抽牌次数。
\(n,m\le2\times10^6\)。
\(\mathcal{Solution}\)
称从初始牌堆开始抽牌一直到抽到鬼牌为一轮操作,发现结束时必然抽了若干个完整的轮且不能中途终止。所以“抽完一轮”和“结束抽牌”两事件独立,分别记二者的随机变量为 \(\xi_1\) 和 \(\xi_2\),则答案为 \(E(\xi_1\xi_2)=E(\xi_1)E(\xi_2)\)。
\(E(\xi_1)\) 显然等于一轮抽到数字牌的期望张数 \(+1\)。 而由期望线性性,它也等于 \(n\times p+1\),其中 \(p\) 表示抽到某一张牌的概率,有:
\]
一种直观的解释方法是,把每张数字牌和 \(m\) 张鬼牌绑为一组,每次拿出这样一组牌,再从中随机选出一张作为抽到的牌,其它牌丢掉,不难证明这和原操作等价。显然拿出某一张数字牌所在的组时,有 \(p=\frac{1}{m+1}\) 的概率真正拿到这张数字牌,不然就永远拿不到了。于是,我们求到了:
\]
求 \(E(\xi_2)\),令 \(f(i)\) 表示已有 \(|S|=n-i\),到结束时的期望轮数。方程有:
\]
特别留意上式,总牌数 \(m+i\) 是因为其他 \(n-i\) 张数字牌没有任何意义,可以忽略;前一项抽到鬼牌,轮数才要 \(+1\);后一项抽到有用数字牌,但是这一轮并没有结束,所以不用 \(+1\)。
整理一下:
\]
对于边界 \(f(1)\),即 \(m+1\) 张里挑出一张的期望,显然有 \(f(1)=m+1\)。代一代求出 \(f(n)\):
\]
综上,答案为:
E(\xi_1\xi_2)&=E(\xi_1)E(\xi_2)\\
&=\left(\frac{n}{m+1}+1\right)f(n)\\
&=\left( \frac{n}{m+1}+1 \right)\left( 1+m\sum_{i=1}^n\frac1i \right)
\end{aligned}
\]
计算即可。复杂度 \(\mathcal O(n+\log m)\)。
\(\mathcal{Code}\)
/* Clearink */
#include <cstdio>
const int MOD = 998244353, MAXN = 2e6;
int n, m, inv[MAXN + 5];
inline int qkpow ( int a, int b, const int p = MOD ) {
int ret = 1;
for ( ; b; a = 1ll * a * a % p, b >>= 1 ) ret = 1ll * ret * ( b & 1 ? a : 1 ) % p;
return ret;
}
int main () {
scanf ( "%d %d", &n, &m );
int turn = ( n + m + 1ll ) * qkpow ( m + 1, MOD - 2 ) % MOD, times = 1;
for ( int i = 1; i <= n; ++ i ) {
inv[i] = i ^ 1 ? 1ll * inv[MOD % i] * ( MOD - MOD / i ) % MOD : 1;
times = ( times + 1ll * m * inv[i] ) % MOD;
}
printf ( "%d\n", int ( 1ll * turn * times % MOD ) );
return 0;
}
Solution -「CF 1392H」ZS Shuffles Cards的更多相关文章
- 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}\ ...
随机推荐
- c# - 一个.cs类文件里如何建多个类
方法类可以使用 internal 修饰符,意为接口类, 主函数建议添加私有修饰符 private 控制台打印
- 第10组 Alpha冲刺 (3/6)(组长)
1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/13971668.html ·作业博客:https://edu.cnblogs.co ...
- Windows 重装系统,配置 WSL,美化终端,部署 WebDAV 服务器,并备份系统分区
最新博客文章链接 最近发现我 Windows11 上的 WSL 打不开了,一直提示我虚拟化功能没有打开,但我看了下配置,发现虚拟化功能其实是开着的.然后试了各种方法,重装了好几次系统,我一个软件一个软 ...
- idea环境下SpringBoot Web应用引入JSP
1. 环境 开发环境:idea2019.3 jkd版本:1.8 springboot版本:2.6.2 2. 引入JSP的步骤 2.1 新建工程,引入依赖 这里只是解析jsp,因此只需要引入spring ...
- Python函数与lambda 表达式(匿名函数)
Python函数 一.函数的作用 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段 函数能提高应用的模块性和代码的重复利用率 python 内置函数:https://docs.pytho ...
- [javaweb]strut2-001漏洞分析
Strut2-001 漏洞描述 框架解析JSP页面标签时会对用户输入的Value值获取,在获取对应的Value值中递归解析%{.}造成了二次解析,最终触发表达式注入漏洞,执行任意代码 影响版本 2.0 ...
- Python中hash加密
目录 简介 概念 特点 hash有哪些 算法碰撞 加盐防碰撞 加密 hashlib 主要方法 特有方法 使用方法 加盐 crypt 主要方法 使用说明 应用 密码加密 应用一致性校验 简介 概念 散列 ...
- golang中通过递归或通道实现斐波那契数列
1. 循环实现 package main import "fmt" func fibonacciFor(nums int) (s1 []int) { // 循环实现斐波那切数列 n ...
- java单例模式(饿汉式和懒汉式)
1 /* 2 * 设计模式:对问题行之有效的解决方式.其实它是一种思想. 3 * 4 * 1,单例设计模式 5 * 解决的问题:就是可以保证一个类在内容中的对象唯一性. 6 * 7 * 必须对于多个程 ...
- 近期Android学习
近5天没有更新博客,因为这几天略微放下了python的学习,android这边连带项目比较急迫,先花大约1个星期的时间把重心放在Android,但python肯定还会坚持下去,毕竟连着学了那么久了. ...