【题目】一套全场爆零的好题之却被老师逮个正着

不知道谁给了没有看懂B题题面的我勇气滚去看C题。
本人的做法跟wangdy类似。(%%%真正的AK巨佬wangdy)

题目大意

同学们在教室传答案,却被老师逮个正着
全班共有 n n n个同学,一学期共有 2 n 2^n 2n次考试,每次考试参与传答案的同学都不完全相同。老师每次考试有一半的概率记录这次考试参与传答案的同学名单,也有一半的概率当做什么也没发生。到了期末,老师检查一下自己记下的名单,找出每次都参与了传答案的同学,作为这学期的始作俑者。特别的,如果老师一学期没有记录任何一次考试的传答案名单,则没有学生是始作俑者。
老师对第 i i i个学生的惩罚系数是正整数 a i a_i ai。期末抓出始作俑者之后,算出始作俑者人数 x x x和最大的惩罚系数 y y y,对全班施加的惩罚量 z = x y z=xy z=xy。特别的,如果没有学生是始作俑者,惩罚量为 0 0 0
求期末惩罚量的期望 E ( z ) E(z) E(z) 。为了方便,输出 E ( z ) × 2 2 n m o d    998244353 E(z)\times 2^{2^n}\mod 998244353 E(z)×22nmod998244353

2 ⩽ n ⩽ 2 12 2\leqslant n\leqslant 2^{12} 2n212


思路

nodgd造得一手好数据,本人n方做法跑了4s。

一共有 2 n 2^n 2n次考试,每一次考试老师都有记录和不记录两种选择,总的情况就是 2 2 n 2^{2^n} 22n。于是最终答案就是所有情况的惩罚量之和。

考虑枚举始作俑者人数 x x x和最大惩罚系数 y y y,计算有多少种情况对应 x , y x,y x,y。记 c 1 [ i ] c_1[i] c1[i]为惩罚系数 = i =i =i的人数, c 2 [ i ] c_2[i] c2[i]为惩罚系数 ⩽ i \leqslant i i的人数。 x x x个始作俑者中一定有一个人惩罚系数 = y =y =y,且所有人的惩罚系数 ⩽ y \leqslant y y。若 c 2 [ y ] < x c_2[y]<x c2[y]<x,则合法情况数为 0 0 0。否则在 c 1 [ y ] c_1[y] c1[y]个人中选出一个人当作惩罚系数最大的始作俑者,然后在另外 c 2 [ y ] − 1 c_2[y]-1 c2[y]1个人中选出另外 x − 1 x-1 x1个人,方案数为 C c 1 [ y ] 1 C c 2 [ y ] − 1 x − 1 C_{c_1[y]}^1C_{c_2[y]-1}^{x-1} Cc1[y]1Cc2[y]1x1。但如果有多个人的惩罚系数都为 y y y,这样算就会算重。于是搞一波容斥:
∑ k = 1 c 1 [ y ] ( − 1 ) k − 1 C c 1 [ y ] k C c 2 [ y ] − k x − k \sum_{k=1}^{c_1[y]}(-1)^{k-1}C_{c_1[y]}^kC_{c_2[y]-k}^{x-k} k=1c1[y](1)k1Cc1[y]kCc2[y]kxk

当这 x x x个始作俑者确定以后,还要讨论其余 n − x n-x nx人的情况。每次考试参与传答案的同学都不完全相同,意味着每次考试唯一对应 n n n个同学的一个子集。首先这 x x x个始作俑者一定都出现在老师记录名单的每一次考试中,这样的考试有 2 n − x 2^{n-x} 2nx次(相当于去掉这 x x x个始作俑者,其余 n − x n-x nx个同学的子集数),选择的方案数为 2 2 n − x 2^{2^{n-x}} 22nx。但可能有其它的同学出现在选择出来的每一次考试中,而这些同学不是始作俑者,这种选法不合法,需要减掉。于是又搞一波容斥:
∑ k = 0 n − x ( − 1 ) k ⋅ 2 2 n − x − k C n − x k \sum_{k=0}^{n-x}(-1)^k\cdot 2^{2^{n-x-k}}C_{n-x}^k k=0nx(1)k22nxkCnxk

于是答案就出来了( x = 0 x=0 x=0时的惩罚量为 0 0 0,直接跳过):
a n s = ∑ x = 1 n ∑ y ∈ a i ( ∑ k = 1 c 1 [ y ] ( − 1 ) k − 1 C c 1 [ y ] k C c 2 [ y ] − k x − k ) ( ∑ k = 0 n − x ( − 1 ) k ⋅ 2 2 n − x − k C n − x k ) x y ans=\sum_{x=1}^n\sum_{y\in a_i}\bigg(\sum_{k=1}^{c_1[y]}(-1)^{k-1}C_{c_1[y]}^kC_{c_2[y]-k}^{x-k}\bigg)\bigg(\sum_{k=0}^{n-x}(-1)^k\cdot 2^{2^{n-x-k}}C_{n-x}^k\bigg)xy ans=x=1nyai(k=1c1[y](1)k1Cc1[y]kCc2[y]kxk)(k=0nx(1)k22nxkCnxk)xy

虽然有三层循环,但 ∑ y ∈ a i ∑ k = 1 c 1 [ y ] \sum\limits_{y\in a_i}\sum\limits_{k=1}^{c_1[y]} yaik=1c1[y]恰好把 n n n个同学全部枚举一遍, ∑ k = 0 n − x \sum\limits_{k=0}^{n-x} k=0nx y y y无关,因此可以做到 O ( n 2 ) O(n^2) O(n2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值