\(\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\) 表示抽到某一张牌的概率,有:

\[p=\frac{1}{m+1}
\]

  一种直观的解释方法是,把每张数字牌和 \(m\) 张鬼牌绑为一组,每次拿出这样一组牌,再从中随机选出一张作为抽到的牌,其它牌丢掉,不难证明这和原操作等价。显然拿出某一张数字牌所在的组时,有 \(p=\frac{1}{m+1}\) 的概率真正拿到这张数字牌,不然就永远拿不到了。于是,我们求到了:

\[E(\xi_1)=\frac{n}{m+1}+1
\]

  求 \(E(\xi_2)\),令 \(f(i)\) 表示已有 \(|S|=n-i\),到结束时的期望轮数。方程有:

\[f(i)=\frac{m}{m+i}\left(f(i)+1\right)+\frac{i}{m+i}f(i-1)
\]

  特别留意上式,总牌数 \(m+i\) 是因为其他 \(n-i\) 张数字牌没有任何意义,可以忽略;前一项抽到鬼牌,轮数才要 \(+1\);后一项抽到有用数字牌,但是这一轮并没有结束,所以不用 \(+1\)。

  整理一下:

\[f(i)=f(i-1)+\frac{m}{i}
\]

  对于边界 \(f(1)\),即 \(m+1\) 张里挑出一张的期望,显然有 \(f(1)=m+1\)。代一代求出 \(f(n)\):

\[f(n)=1+m\sum_{i=1}^n\frac1{i}
\]

  综上,答案为:

\[\begin{aligned}
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的更多相关文章

  1. Solution -「CF 1342E」Placing Rooks

    \(\mathcal{Description}\)   Link.   在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...

  2. Solution -「CF 1622F」Quadratic Set

    \(\mathscr{Description}\)   Link.   求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...

  3. Solution -「CF 923F」Public Service

    \(\mathscr{Description}\)   Link.   给定两棵含 \(n\) 个结点的树 \(T_1=(V_1,E_1),T_2=(V_2,E_2)\),求一个双射 \(\varph ...

  4. Solution -「CF 923E」Perpetual Subtraction

    \(\mathcal{Description}\)   Link.   有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机 ...

  5. Solution -「CF 1586F」Defender of Childhood Dreams

    \(\mathcal{Description}\)   Link.   定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...

  6. Solution -「CF 1237E」Balanced Binary Search Trees

    \(\mathcal{Description}\)   Link.   定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: ...

  7. Solution -「CF 623E」Transforming Sequence

    题目 题意简述   link.   有一个 \(n\) 个元素的集合,你需要进行 \(m\) 次操作.每次操作选择集合的一个非空子集,要求该集合不是已选集合的并的子集.求操作的方案数,对 \(10^9 ...

  8. Solution -「CF 1023F」Mobile Phone Network

    \(\mathcal{Description}\)   Link.   有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权 ...

  9. Solution -「CF 599E」Sandy and Nuts

    \(\mathcal{Description}\)   Link.   指定一棵大小为 \(n\),以 \(1\) 为根的有根树的 \(m\) 对邻接关系与 \(q\) 组 \(\text{LCA}\ ...

随机推荐

  1. c# - 一个.cs类文件里如何建多个类

    方法类可以使用 internal 修饰符,意为接口类, 主函数建议添加私有修饰符 private   控制台打印

  2. 第10组 Alpha冲刺 (3/6)(组长)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/13971668.html ·作业博客:https://edu.cnblogs.co ...

  3. Windows 重装系统,配置 WSL,美化终端,部署 WebDAV 服务器,并备份系统分区

    最新博客文章链接 最近发现我 Windows11 上的 WSL 打不开了,一直提示我虚拟化功能没有打开,但我看了下配置,发现虚拟化功能其实是开着的.然后试了各种方法,重装了好几次系统,我一个软件一个软 ...

  4. idea环境下SpringBoot Web应用引入JSP

    1. 环境 开发环境:idea2019.3 jkd版本:1.8 springboot版本:2.6.2 2. 引入JSP的步骤 2.1 新建工程,引入依赖 这里只是解析jsp,因此只需要引入spring ...

  5. Python函数与lambda 表达式(匿名函数)

    Python函数 一.函数的作用 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段 函数能提高应用的模块性和代码的重复利用率 python 内置函数:https://docs.pytho ...

  6. [javaweb]strut2-001漏洞分析

    Strut2-001 漏洞描述 框架解析JSP页面标签时会对用户输入的Value值获取,在获取对应的Value值中递归解析%{.}造成了二次解析,最终触发表达式注入漏洞,执行任意代码 影响版本 2.0 ...

  7. Python中hash加密

    目录 简介 概念 特点 hash有哪些 算法碰撞 加盐防碰撞 加密 hashlib 主要方法 特有方法 使用方法 加盐 crypt 主要方法 使用说明 应用 密码加密 应用一致性校验 简介 概念 散列 ...

  8. golang中通过递归或通道实现斐波那契数列

    1. 循环实现 package main import "fmt" func fibonacciFor(nums int) (s1 []int) { // 循环实现斐波那切数列 n ...

  9. java单例模式(饿汉式和懒汉式)

    1 /* 2 * 设计模式:对问题行之有效的解决方式.其实它是一种思想. 3 * 4 * 1,单例设计模式 5 * 解决的问题:就是可以保证一个类在内容中的对象唯一性. 6 * 7 * 必须对于多个程 ...

  10. 近期Android学习

    近5天没有更新博客,因为这几天略微放下了python的学习,android这边连带项目比较急迫,先花大约1个星期的时间把重心放在Android,但python肯定还会坚持下去,毕竟连着学了那么久了. ...