1 条题解

  • 0
    @ 2026-9-3 10:41:47

    加密货币灯:题解

    思路

    把所有灯最终被选择的先后顺序看成一个等概率随机排列。设随机变量 TT 表示装置停止时已经点亮的灯数。对非负整数随机变量使用尾和公式:

    E[T]=∑m≥0Pr⁡(T>m).\mathbb E[T]=\sum_{m\ge 0}\Pr(T>m).

    T>mT>m 等价于前 mm 盏被点亮的灯仍未触发停止条件。两个位置能同时存在于一个长度为 kk 的区间中,当且仅当它们的距离小于 kk。因此,前 mm 个位置按从小到大排列后,相邻位置的距离都必须至少为 kk。

    从 nn 个位置中任取 mm 个的方案数为 (nm)\binom nm。若选中的位置是

    x1<x2<⋯<xm,x_1<x_2<\cdots<x_m,

    令 yi=xi−(i−1)(k−1)y_i=x_i-(i-1)(k-1),则 1≤y1<⋯<ym≤n−(k−1)(m−1)1\le y_1<\cdots<y_m\le n-(k-1)(m-1)。所以合法集合数为

    (n−(k−1)(m−1)m).\binom{n-(k-1)(m-1)}m.

    于是

    $$\Pr(T>m)= \frac{\binom{n-(k-1)(m-1)}m}{\binom nm},$$

    只需枚举仍满足 n−(k−1)(m−1)≥mn-(k-1)(m-1)\ge m 的 mm。

    做法

    子任务 1 可以枚举全部灯的排列,模拟第一次出现距离小于 kk 的两盏灯,累加停止位置,复杂度为 O(n!n2)O(n!n^2)。

    子任务 2 可以枚举全部位置子集,检查相邻选中位置的距离是否至少为 kk,按子集大小统计合法集合数,再代入尾和公式,复杂度为 O(2nn)O(2^n n)。

    满分做法预处理阶乘和逆阶乘,在 O(1)O(1) 时间计算组合数。对每组询问依次枚举 mm,把上式的概率加入答案。由于 mm 每次递增,枚举次数不超过 nn。

    模意义下除以 (nm)\binom nm,等价于乘上

    (nm)−1=m!(n−m)!(n!)−1.\binom nm^{-1}=m!(n-m)!(n!)^{-1}.

    复杂度

    预处理复杂度为 O(N)O(N),其中 NN 是所有询问中的最大 nn。每组询问的时间复杂度为 O(n)O(n),空间复杂度为 O(N)O(N)。

    • 1

    信息

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