1 条题解

  • 0
    @ 2025-10-28 15:20:45

    1. 题意整理

    • nn 种牌,大小 1n1 \dots n,每种 44 张,总共 4n4n 张。
    • 初始手牌 1313 张(每种牌最多 44 张)。
    • 剩下的 4n134n - 13 张牌随机排列 PP
    • 定义 SiS_i = 初始 1313 张 + PP 的前 ii 张牌。
    • 权值 f(P)f(P) = 最小的 ii 使得 SiS_i 有一个 大小为 14 的子集 是胡的。
    • 胡牌条件(14 张牌):
      1. 一对(对子) + 四个面子(刻子或顺子)
      2. 七个互不相同的对子(七对子)
    • f(P)f(P) 的期望,模 998244353998244353

    2. 思路分析

    2.1 转化为计数问题

    m=4n13m = 4n - 13 是剩余牌的数量。

    对于每个 ii1im1 \le i \le m),我们想知道有多少种排列 PP 满足:

    • SiS_{i} 有胡牌子集
    • Si1S_{i-1} 没有胡牌子集

    那么 f(P)=if(P) = i 的排列数就是:

    $$\text{count}(i) = \{P \mid S_i \text{ 可胡}, S_{i-1} \text{ 不可胡\} } $$

    特别地,若 S0S_0(初始手牌)就可胡,那么 f(P)=0f(P)=0?不对,ii11 开始,因为 S0S_0 只有 13 张牌,不可能胡(胡要 14 张)。所以 f(P)f(P) 最小是 11

    实际上 S0S_0 不可能胡,所以 f(P)f(P) 是第一个 i1i \ge 1 使得 SiS_i 可胡。


    2.2 期望公式

    N=m!N = m! 总排列数。

    期望:

    $$E = \frac{1}{N} \sum_{k=1}^m k \cdot \text{count}(k) $$

    其中 count(k)=Pf(P)=k\text{count}(k) = {P \mid f(P) = k}

    更方便的计数方式:

    count(k)=AkAk1\text{count}(k) = A_k - A_{k-1}

    其中 Ak=PSk 可胡A_k ={P \mid S_k \text{ 可胡}},且 A0=0A_0 = 0

    于是:

    E=1Nk=1mk(AkAk1)E = \frac{1}{N} \sum_{k=1}^m k (A_k - A_{k-1})

    化简:

    $$E = \frac{1}{N} \left( \sum_{k=1}^m k A_k - \sum_{k=0}^{m-1} (k+1) A_k \right) $$$$= \frac{1}{N} \left( m A_m - \sum_{k=0}^{m-1} A_k \right) $$

    因为 Am=NA_m = N(最后一定可胡),所以:

    E=m1Nk=0m1AkE = m - \frac{1}{N} \sum_{k=0}^{m-1} A_k

    其中 A0=0A_0 = 0


    2.3 问题转化为求 AkA_k

    AkA_k = 有多少种排列 PP 使得 SkS_k 可胡。

    等价于:从 4n4n 张牌中选出初始 1313 张 + PP 的前 kk 张,这个集合包含一个胡牌的 14 张子集。


    3. 胡牌的判定

    两种胡牌方式:

    3.1 七对子形式

    需要 7 个不同的对子(14 张牌),每个对子是相同大小的两张牌,且 7 个对子的大小互不相同。

    条件:有至少 7 种牌,每种牌的张数 2\ge 2


    3.2 一般形式(一对 + 四面子)

    面子可以是:

    • 刻子 (x,x,x)(x,x,x)
    • 顺子 (x,x+1,x+2)(x,x+1,x+2)

    对子 (p,p)(p,p) 与面子不重叠。


    4. 对 AkA_k 的计数方法

    4.1 牌的张数表示

    设初始 13 张牌中,大小为 jj 的张数为 cjc_j0cj40 \le c_j \le 4)。

    PP 的前 kk 张中,大小为 jj 的张数为 tjt_j0tj4cj0 \le t_j \le 4 - c_j)。

    那么 SkS_k 中大小为 jj 的张数 = cj+tjc_j + t_j


    4.2 七对子情况

    七对子成立条件:jcj+tj27|{j \mid c_j + t_j \ge 2}| \ge 7


    4.3 一般型情况

    这是麻将标准型,可以用 DP 判断:设 dp[i][p][a][b]dp[i][p][a][b] 表示考虑完前 ii 种牌,已有 pp 个面子,上一种牌剩下 aa 张,上上种牌剩下 bb 张(用于顺子),且已经选好对子与否的状态。

    但这里我们不是判断固定手牌,而是计数有多少种 (t1,,tn)(t_1,\dots,t_n) 使得存在一个 14 张的子集可胡。


    4.4 简化:提前胡牌的条件

    SkS_k 可胡意味着:存在一个大小为 14 的子集 TSkT \subseteq S_k 可胡。

    因为 SkS_k 的牌数 = 13+k13 + k,要取出 14 张胡牌,那么 k1k \ge 1


    5. 另一种思路:容斥 + 提前胡牌的最早巡目

    我们考虑最早的胡牌时刻 ii,意味着加入第 ii 张牌后才第一次可胡。

    那么 Si1S_{i-1} 不可胡,但 SiS_i 可胡。

    设新加入的牌是 xx(大小和种类确定),那么 SiS_i 可胡必须用到 xx(否则 Si1S_{i-1} 就可胡了)。


    5.1 用到新牌 xx 的胡牌

    有两种情况:

    1. 七对子型:新牌 xx 和已有的另一张同大小组成对子,并且其他 6 对不涉及 xx 大小。
    2. 一般型:新牌 xx 作为对子的一部分,或者作为面子的组成部分。

    5.2 一般型的细分

    设新牌大小为 wwSi1S_{i-1}ww 的张数为 cw+twc_w + t_w'twt_w' 是前 i1i-1 张中抽到的该大小的数量)。

    • 如果新牌作为对子:那么 cw+tw1c_w + t_w' \ge 1(之前至少有一张同大小),这样新牌和它组成对子。
    • 如果新牌作为面子的一部分:
      • 刻子:需要 cw+tw2c_w + t_w' \ge 2(之前至少有两张同大小)
      • 顺子:需要 w1,w,w+1w-1, w, w+1Si1S_{i-1} 中各有至少 1 张(对新牌 ww 是中间那张),或者 w,w+1,w+2w, w+1, w+2(新牌是最小那张,需要后两种在 Si1S_{i-1} 中各至少 1 张),或者 w2,w1,ww-2, w-1, w(新牌是最大那张,需要前两种在 Si1S_{i-1} 中各至少 1 张)。

    6. 概率计算框架

    我们可以枚举第 ii 张牌是什么(大小 ww),以及前 i1i-1 张牌的分布情况,计算满足“Si1S_{i-1} 不可胡但加入 ww 后可胡”的排列数。

    Bi,wB_{i,w} = 排列 PP 的数量,使得 f(P)=if(P) = i 且第 ii 张牌大小为 ww

    那么:

    count(i)=w=1nBi,w\text{count}(i) = \sum_{w=1}^n B_{i,w} $$E = \frac{1}{N} \sum_{i=1}^m i \cdot \text{count}(i) $$

    6.1 计算 Bi,wB_{i,w}

    固定 ww,设 q=cwq = c_w 初始张数。

    i1i-1 张中 ww 大小的张数 uu 满足 0u4q0 \le u \le 4 - q

    i1i-1 张的分布 {uj}\{u_j\} 满足 uj=i1\sum u_j = i-1,且 uj4cju_j \le 4 - c_j

    我们要计数这些分布使得 Si1S_{i-1} 不可胡,但加入一张 ww 后(uu+1u \to u+1)可胡。


    6.2 七对子情况

    加入 ww 后七对子成立:之前 u1u \ge 1ww 大小已有至少 1 张,新牌组成第 7 个对子。需要其他 6 种大小 rr 满足 cr+ur2c_r + u_r \ge 2


    7. 实现方法(大纲)

    由于 n100n \le 100,直接枚举所有分布不可行,但可以用 DP 计数:

    1. 预处理初始手牌 c1cnc_1 \dots c_n
    2. 对于每个 ii11mm,对于每个 ww,计算 Bi,wB_{i,w}
      • 用 DP 状态 (pos,cards_used,mask)(pos, \text{cards\_used}, \text{mask}) 表示考虑前 pospos 种牌,已经用了 cards_used\text{cards\_used} 张牌,mask\text{mask} 表示哪些大小已经满足“有至少 2 张”等条件。
      • 同时要维护“是否已经可胡”的信息,但这里我们要求 Si1S_{i-1} 不可胡,所以 DP 要能区分可胡与不可胡的状态。

    实际上,由于状态复杂,竞赛中常用自动机方法:将胡牌条件建成一个有限状态自动机,然后 DP 记录状态。


    8. 最终公式(理论)

    我们推导出的简洁公式:

    E=m1Nk=0m1AkE = m - \frac{1}{N} \sum_{k=0}^{m-1} A_k

    其中 AkA_k 是前 kk 张牌+初始牌可胡的排列数。

    计算 AkA_k

    $$A_k = \sum_{\substack{0 \le t_j \le 4-c_j \\ \sum t_j = k}} \frac{k!}{\prod t_j!} \cdot (m-k)! \cdot [S_k \text{ 可胡}] $$

    这里 k!tj!\frac{k!}{\prod t_j!} 是前 kk 张牌按大小分布的排列数,(mk)!(m-k)! 是剩余牌的排列数。

    因此:

    $$A_k = (m-k)! \cdot k! \cdot \sum_{\substack{\mathbf{t} \\ \sum t_j = k}} \frac{[S_k \text{ 可胡}]}{\prod t_j!} $$

    9. 模运算

    998244353998244353,需要预处理阶乘和逆元。

    设:

    $$F(k) = \sum_{\substack{\mathbf{t} \\ \sum t_j = k}} \frac{[S_k \text{ 可胡}]}{\prod t_j!} $$

    则:

    Ak=(mk)!k!F(k)A_k = (m-k)! \cdot k! \cdot F(k) $$E = m - \frac{1}{m!} \sum_{k=0}^{m-1} (m-k)! \cdot k! \cdot F(k) $$

    10. 总结

    这道题的难点在于:

    1. 麻将胡牌规则的组合表达。
    2. 最早胡牌巡目的概率转化。
    3. 大规模状态计数需要 DP 优化。

    最终我们得到了一个用 F(k)F(k) 表示的公式,而 F(k)F(k) 可以通过动态规划按牌的大小依次计算,同时检查胡牌可能性。

    • 1

    信息

    ID
    4499
    时间
    2500ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    4
    已通过
    1
    上传者