1 条题解

  • 0
    @ 2026-5-5 17:41:00

    E. I Love Balls 详细题解

    题目重述

    nn 个球,其中前 kk 个是特殊球,其余为普通球。每个球有一个价值 viv_i。游戏过程:爱丽丝先手,每轮当前玩家随机取一个球(等概率),将其价值加入自己的得分,然后移除该球。若取到的是特殊球,则同一玩家继续下一轮;若取到普通球,则换对方继续。求游戏结束时爱丽丝和鲍勃的期望得分,对 109+710^9+7 取模。

    核心观察

    由于所有球被随机抽取的顺序是均匀随机的,我们可以将游戏等价转化为:将 nn 个球随机排成一列,然后按顺序依次处理。初始玩家为爱丽丝。遇到一个球时,若它是普通球,则当前玩家得到它,然后下一球换对方;若它是特殊球,则当前玩家得到它,并且下一球仍由同一玩家处理。这样,每个球最终归属于谁完全取决于排列中它之前出现的普通球个数的奇偶性。

    因此,每个球被爱丽丝得到的概率只与排列中它前面普通球个数的奇偶性有关,而特殊球和普通球在排列中的分布是均匀的。由对称性,所有特殊球被爱丽丝得到的概率相同,记为 psp_s;所有普通球被爱丽丝得到的概率也相同,记为 pnp_n

    计算概率

    c=nkc = n - k 为普通球个数。我们需要计算在随机排列中,一个特定普通球或特殊球被爱丽丝得到的概率。

    1. 普通球的概率 pnp_n

    考虑一个特定的普通球。在随机排列中,它和其他 c1c-1 个普通球以及 kk 个特殊球随机混合。爱丽丝得到它的条件是:它前面出现的普通球个数为偶数(因为爱丽丝先手,初始为偶数个普通球后轮到爱丽丝)。因此问题转化为:在 c1c-1 个同类普通球和 kk 个特殊球的随机序列中,前面出现的普通球个数为偶数的概率。

    更简洁地,我们可以利用一个经典的组合恒等式:随机排列中,一个普通球前面普通球个数的奇偶性均匀分布。实际上,我们可以通过如下方式计算:

    cc 个普通球视为可区分的(因为球是不同的),考虑所有 n!n! 种排列。固定某一普通球 XX,其余 n1n-1 个球随机排列。现在计算 XX 前面有偶数个普通球的排列数。由于其余 c1c-1 个普通球与 XX 没有任何特殊关系,且总数 n1n-1 很大,直观上奇数与偶数各占一半。严格证明:对除 XX 外的球任意排列,然后插入 XX 到某个位置。XX 前面的普通球个数等于前面已有普通球数。所有插入位置等概率,且前面普通球数从 00c1c-1 依次出现。这 cc 个数值中奇偶各半(当 cc 为奇数时多一个?需要仔细)。

    更简单的办法:考虑所有排列,将 XX 移到末尾不影响概率。实际上,可以证明 pn=12p_n = \frac{1}{2}cc 为偶数?不,我们需要严格推导。

    递推法:设 f(c)f(c) 为随机排列中,一个特定普通球前面有偶数个普通球的概率。考虑第一个球(与 XX 无关)是否是普通球。但更好的方法是利用对称性:交换两个普通球不影响分布?另一个经典结论:在随机排列中,任意两个不同普通球,其一在另一个前面的概率为 1/21/2,这不能直接得到奇偶。

    实际上,我们可以将问题转化为:cc 个普通球(包括 XX)加上 kk 个特殊球,随机排列。XX 的位置分布是均匀的。它前面普通球个数 gg 的分布是:从 00c1c-1,概率为 1n×?\frac{1}{n} \times ? 每个位置等概,但每个位置前面普通球个数不同。已知 XX 在第 ii 个位置(11-based),它前面有 i1i-1 个球,其中普通球个数服从超几何分布。所以 $p_n = \frac{1}{n} \sum_{i=1}^n P(\text{前 }i-1\text{ 个中有偶数个普通球})$。这个求和可以简化。

    更简洁的推导来自递推关系:设 E(c)E(c) 为当前有 cc 个普通球和任意个特殊球(不影响普通球相对顺序),在随机排列下,一个特定普通球被先手(爱丽丝)拿到的概率。考虑第一个位置上的球:

    • 若第一个球恰好是那个特定普通球(概率 1c+特殊球数\frac{1}{c+\text{特殊球数}}),则它被先手得到(因为之前0个普通球,偶),概率为1。
    • 若第一个球是其他普通球(概率 c1c+特殊球数\frac{c-1}{c+\text{特殊球数}}),则先手得到它(也是普通,但不会影响概率?),然后游戏继续,此时剩余 c1c-1 个普通球和相同特殊球,但轮到对手(因为刚取的是普通球),所以我们要的是该特定普通球被对手得到的概率?需要建立方程。

    实际上,更常用的方法是考虑剩余游戏的状态。由于特殊球不换手,它们只延长当前玩家的回合,并不改变普通球的相对顺序对奇偶的影响。因此,我们可以把问题简化为只考虑普通球,将一组连续的特殊球视为单个“回合延长”事件。最终,普通球出现的顺序决定了谁得到它们,而特殊球则完全被当前玩家获得,且中间不换手。

    一个漂亮的解法:将游戏过程看作在普通球之间插入特殊球,但特殊球不影响换手顺序。因此,如果我们忽略特殊球,只考虑 cc 个普通球的顺序,那么先手得到第一个普通球,然后交换,第二个普通球给后手,依次交替。所以普通球被先手得到的概率是:第奇数个普通球(按出现顺序)被先手得到,第偶数个被后手得到。由于普通球在排列中是随机顺序,一个特定普通球出现在第几个位置(按普通球顺序)是均匀随机的。因此它在奇数位置的概率为 c/2/c\lceil c/2 \rceil / ccc 为奇数?实际上,对于 cc 个普通球,它们按出现顺序编号 11cc,每个普通球等可能出现在任何一个位置。因此,某个特定普通球出现在奇数位置的概率 = c/2c\frac{\lceil c/2 \rceil}{c}。因为奇数位置有 c/2\lceil c/2 \rceil 个,偶数位置有 c/2\lfloor c/2 \rfloor 个。

    所以:

    $$p_n = \frac{\lceil c/2 \rceil}{c} = \begin{cases} \frac{c+1}{2c}, & c \text{ 为奇数},\\ \frac{c/2}{c} = \frac{1}{2}, & c \text{ 为偶数}. \end{cases}$$

    2. 特殊球的概率 psp_s

    对于特殊球,它被谁得到取决于它出现在哪一段连续的回合中。由于特殊球不换手,它总是被当前玩家得到。当前玩家由上一个普通球的奇偶性决定。更具体地,考虑所有普通球将序列分成若干段,每段内全是特殊球(可能为空)。第一个普通球之前的特殊球段由先手获得,第一个普通球之后到第二个普通球之间的特殊球由后手获得,等等。因此,特殊球被先手获得当且仅当它出现在奇数次普通球之前的段中,或最后一个普通球之后的段中(如果总普通球数为偶数,则最后一段由后手?需要小心)。

    设普通球出现的位置把序列分为 c+1c+1 个段(包括首尾)。第 ii 个段(从 00 开始计数)包含特殊球,其中 i=0i=0 表示第一个普通球之前,i=1i=1 表示第一个和第二个普通球之间,…,i=ci=c 表示最后一个普通球之后。这些段中的特殊球由谁获得?玩家顺序:先手获得段 00,然后遇到第一个普通球后换手,所以段 11 由后手获得,段 22 由先手获得,以此类推。因此,段索引 ii 对应的玩家为:若 ii 为偶数,则先手;奇数则后手。

    特殊球均匀随机分布在所有特殊球中。一个特定特殊球落在段 ii 的概率正比于该段长度。但由于所有特殊球对称,只需考虑一个特殊球落在每个段的概率。实际上,我们可以计算:在随机排列中,将 kk 个特殊球与 cc 个普通球混合,一个特定特殊球前面普通球个数的奇偶性决定它被谁得到。与普通球类似,我们也可以推导出概率表达式。

    一个更简单的方法:利用线性期望。所有球的总和期望分配中,爱丽丝的期望得分等于所有球价值乘以该球被爱丽丝得到的概率之和。我们已经知道 pnp_n,再结合总期望和等于总价值(因为所有球最终被两玩家全部分配),有:

    EA=Ssps+SnpnE_A = S_s \cdot p_s + S_n \cdot p_n EB=SEAE_B = S - E_A

    另外,由对称性,特殊球和普通球的概率之间有关系吗?考虑交替过程,可以推导出 psp_spnp_n 的一个关系式。例如,将游戏视为一个马尔可夫链,我们可以列出方程。

    另一种经典解法:考虑第一次取球。第一次取的球:

    • 若取到特殊球(概率 k/nk/n),则爱丽丝得到它,并且继续由爱丽丝从剩下 n1n-1 个球中取(但此时剩余球中特殊球个数为 k1k-1,普通球 cc)。游戏状态变化。
    • 若取到普通球(概率 c/nc/n),则爱丽丝得到它,然后换鲍勃先手从剩余 n1n-1 个球中取。

    由此可以建立递推关系,但最终结果可以简化为闭式。实际上,已知结论(见Codeforces原题讨论):

    • c=nk=0c = n - k = 0 时,ps=1p_s = 1pnp_n 无定义。
    • c>0c > 0 时:
      • cc 为奇数:ps=12p_s = \frac{1}{2}pn=c+12cp_n = \frac{c+1}{2c}
      • cc 为偶数:ps=c+22(c+1)p_s = \frac{c+2}{2(c+1)}pn=12p_n = \frac{1}{2}

    我们可以验证这个结论与第一个样例 c=3c=3(奇数)一致:ps=1/2p_s=1/2pn=(3+1)/(23)=4/6=2/3p_n=(3+1)/(2*3)=4/6=2/3。第二个样例中 c=4c=4(偶数)时 pn=1/2p_n=1/2ps=6/(25)=3/5p_s=6/(2*5)=3/5

    算法步骤

    1. 读入 n,kn,k 和数组 vv
    2. 计算总和 S=viS = \sum v_i,特殊球和 Ss=i=1kviS_s = \sum_{i=1}^k v_i,普通球和 Sn=SSsS_n = S - S_s
    3. c=nkc = n - k
    4. c=0c = 0:爱丽丝得分 = SsS_s,鲍勃 = 00
    5. 否则根据 cc 的奇偶性:
      • cc 为奇数:ps=12,pn=c+12c.p_s = \frac{1}{2},\quad p_n = \frac{c+1}{2c}.
      • cc 为偶数:ps=c+22(c+1),pn=12.p_s = \frac{c+2}{2(c+1)},\quad p_n = \frac{1}{2}.
    6. 计算 EA=(Ssps+Snpn)modME_A = (S_s \cdot p_s + S_n \cdot p_n) \bmod M,其中除法用模逆元。
    7. EB=(SEA)modME_B = (S - E_A) \bmod M,确保非负。
    8. 输出 EAE_AEBE_B

    模运算细节

    模数 M=109+7M = 10^9+7。计算 12modM\frac{1}{2} \bmod M22 的逆元 inv2=(M+1)/2=500000004inv2 = (M+1)/2 = 500000004。对于 c+12c\frac{c+1}{2c},计算 (c+1)inv(2c)modM(c+1) \cdot \text{inv}(2c) \bmod M,其中 inv(x)\text{inv}(x) 用快速幂或预处理求逆。

    复杂度

    每个测试用例 O(n)O(n) 求和,加上 O(logM)O(\log M) 求逆元。所有测试用例的 nn 总和 5×105\le 5\times 10^5tt 可达 2×1052\times 10^5,但总 nn 有限,因此时间复杂度主要取决于输入。完全可行。

    正确性说明

    上述概率公式可以通过组合推导或递推关系严格证明。一个简明的证明是利用对称性和线性递推,但限于篇幅,此处只给出结论。该解法已在 Codeforces 题目 "I Love Balls" 中被广泛接受。

    总结

    本题的关键在于将随机游戏转化为排列模型,并利用组合数学求出每个球被先手获得的概率的闭式表达式。最终只需根据 cc 的奇偶性代入公式计算加权和即可,实现简单高效。

    • 1

    信息

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