美团 · 组合数学 · 算法编程题
美团 组合数学 n ≤ 1e6 时限 1 秒 / 256 MB

题目描述

如下图所示,有 2 × n 个仪器,中间的方块是仪器的主体,每个仪器可以充当接收器或者信号源;主体的左右两侧是两个接线点。
现在,我们将左端 2 × n 个接线点随机分成 n 组,每组各含两个点,并将右端 2 × n 个接线点同样随机分成 n 组。然后将每组的两个接线点用导线连接。
图片
这样一来,我们就得到了一组封闭的信号线路。具体而言:
信号从任一信号源 i 出发,通过右侧接线点;
随后,信号通过与右侧接线点连接的导线到达另外一个仪器的左侧接线点,再经过仪器主体到达右侧接线点;此时,如果这个仪器是接收器,那么就视为接收到了信号(注意,接收到信号不会影响信号继续往后传递)。
这个过程持续进行,最终会形成若干个独立的循环。
现在,记 x 表示在所有接收器均能接收到信号的前提下, 2 × n 个仪器中作为信号源的最少数量。求解 x 的方差。
可以证明答案可以表示为一个不可约分数 (p/q) ,为了避免精度问题,请直接输出整数 (p × q^-1 mod M) 作为答案,其中 M = 998244353 , q^-1 是满足 q× q^-1 ≡ 1 ±odM 的整数。更具体地,你需要找到一个整数 x ∈ [0, M) 满足 x × q 对 M 取模等于 p ,您可以查看样例解释得到更具体的说明。
【提示】
本题中,如果您需要使用到除法的取模,即计算 (p× q^-1 mod M) 时, q^-1 需要使用公式 (q^M-2 mod M ) 得到。例如,计算 ((5/4) mod M) :
arrayrll 4^-1 & = & (4^M-2 mod M) \ & = & 748683265 \ ((5/4) mod M) & = & 5 ×4^-1 mod M \ & = & 5 × 748683265 mod M \ & = & 748683266 array

输入输出

输入描述
每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≤ T≤ 10^4) 代表数据组数,每组测试数据描述如下:
在一行上输入一个整数 n(1≤ n≤ 10^6) 代表仪器的数量。
输出描述
对于每组测试数据,新起一行输出一个整数,表示 x 的方差对 M=998244353 取模后的结果。

样例共 1 组

样例 1 · 对于第一组测试数据,左、右两侧各仅有一种配对方式,构成一个长度为 2 的循环。最小信号源数为 1 ,如下图所示。因此 E(X)=1 , D(X)=0 。 对于第二组测试数据,左侧有三种配对( \1,2,\3,4 ; \1,3,\2,4 ; \1,4,\2,3 ),右侧同样三种,合计 3×3=9 种等可能组合。计算可得,需要 1 个信号源的概率为 (6/9) (如下左图所示,为其中一种情况),需要 2 个信号源的概率为 (3/9) (如下右图所示,为其中一种情况),故: E(X)=1×(2/3)+2×(1/3)=(4/3) ; D(X)=E([X-E(X)]^2 )=(1-(4/3))^2×(2/3)+(2-(4/3))^2×(1/3)=(2/9) 。 我们能够找到, 887328314 × 9 = 7985954826 ,对 M 取模后恰好等于分子 2 ,所以 887328314 是需要输出的答案。
输入
3
1
2
3
输出
0
887328314
168592380

算法解析依据充分

考点:组合数学

数据规模 n ≤ 1e6 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 1e6,T ≤ 1e4
  • 复杂度门槛:只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:组合数学

用计数原理(加法/乘法原理)与组合数公式统计方案数。

思路框架(组合数学 通法 · 非本题专属)

  1. 判断是分类计数(相加)还是分步计数(相乘)。
  2. 识别是否重复/是否有序,决定用排列 A(n,m) 还是组合 C(n,m)。
  3. 组合数递推 C[i][j] = C[i-1][j-1] + C[i-1][j],或预处理阶乘与逆元。
  4. 答案通常要求对 1e9+7 取模。

实现要点:阶乘预处理 + 费马小定理求逆元可以在 O(1) 内算任意组合数。

复杂度:时间 O(n) 预处理 / O(1) 查询 | 空间 O(n)

该范式的通法易错点

  • 把排列和组合搞混。
  • 取模意义下直接做除法(应乘逆元)。
  • 方案数溢出未取模。

对照本题

  • 数据规模 n ≤ 1e6,只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。

题目给出的提示

  • 接收到信号不会影响信号继续往后传递)

样例解读

样例 1:输入 3 / 1 / 2 / 3 → 输出 0 / 887328314 / 168592380

对于第一组测试数据,左、右两侧各仅有一种配对方式,构成一个长度为 2 的循环。最小信号源数为 1 ,如下图所示。因此 E(X)=1 , D(X)=0 。

对于第二组测试数据,左侧有三种配对( \1,2,\3,4 ; \1,3,\2,4 ; \1,4,\2,3 ),右侧同样三种,合计 3×3=9 种等可能组合。计算可得,需要 1 个信号源的概率为 (6/9) (如下左图所示,为其中一种情况),需要 2 个信号源的概率为 (3/9) (如下右图所示,为其中一种情况),故:

E(X)=1×(2/3)+2×(1/3)=(4/3) ;

D(X)=E([X-E(X)]^2 )=(1-(4/3))^2×(2/3)+(2-(4/3))^2×(1/3)=(2/9) 。

我们能够找到, 887328314 × 9 = 7985954826 ,对 M 取模后恰好等于分子 2 ,所以 887328314 是需要输

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2025年秋招-美团-技术岗-第一批笔试;2025年秋招-美团-算法策略端-第一批笔试;2025年秋招-美团-全栈岗-第一批笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解