20251116 正睿
挂分场,\(260 \rightarrow 50\)。大样例水到极致。
A
简单题,判一下 \(n = 1\)!!
当最后依次操作是 A 时,A 一定胜利。否则 A 保留尽可能多的偶数(\(0\)),B 保留尽可能多的 \(1\)。需要注意 A 可以将两个连续的 $1 $变成 \(0\),使得 B 还要花一次操作删掉这个 \(0\),可以看成 A 不花费代价消掉两个相邻的 \(1\)。删掉这样的 \(1\),看 \(0, 1\) 那个多即可。
时间复杂度:\(O(n)\)。
没发现 A 可以消掉相邻的两个 \(1\),\(100 \rightarrow 50\)
B
有 \(n\) 个数,每个数对应一个区间 \([l_i, r_i]\)。将这 \(n\) 个数重排,如果 \(i\) 出现在 \(l_i \sim r_i\) 中某个数的后面获得 \(a_i\) 的收益。输出收益最大值
\(n \le 2 \times 10^5, 0 \le a_i \le 20000\)
\(l_i \sim r_i\) 中的点向 \(i\) 连一条有向边,显然是可以缩点的。对于一个 scc 来说,如果有一个 scc 连向它,里面的点都是可以贡献的;否则选择这个 scc 内权值最小的丢掉(放在开始)即可。
建图使用线段树优化即可,时间复杂度:\(O(n \log n)\)。
思路十分自然,但是在 scc 之间建图时没有枚举了线段树上的点(写的暴力,然后忘改了),痛失 \(100pts\)。
C
\(n \le 3000, m \le 2 \times 10^5\)
点击查看标签
标签:容斥原理,二项式反演(min-max 容斥)\(5\) 个操作太繁琐了,简化一下。
- 因为每个 \(a_i\) 均不同,所以每个差分数组 \(d\) 都对应原来的 \(n!\) 个序列。条件转化为随机 \(d\) 序列满足 \(d_i \ge 1, \sum d_i \le m\)
- 根据期望线性性,只需要求出 \(E(b_i)\),前缀的的结果就是 \(E(b_1 + b_2 + \dots b_i) = E(b_1) + E(b_2) + \dots E(b_i)\)。
如果有 \(n\) 个 \(> 0\) 的数,总和至多为 \(m\),方案数为 \(\binom{m}{n}\)。
先讲讲我的抽象 \(60pts\) 做法(\(n \le 50, m \le 10000\))。
如果要求 \(E(b_i)\),可以枚举 \(b_i\) 的取值 \(v\),算出概率(方案数)。枚举 \(b_{l \sim r} = v\), 那么 \(b_{1 \sim l - 1} < v, b_{r + 1, n} > v\)。转化到 \(d\) 上就是有 \(r - l + 1\) 个 \(d_i = v\),\(l - 1\) 个 \(d_i < v\),\(n - r\) 个 \(d_i > v\)。就和 HAOI2008 硬币购物 一样了,对于 \(< v\) 的,枚举多少个数不满足要求,转化成 \(\ge v\) 的,就可以组合数算了(\(m\) 减掉 \(v - 1\) 即可)。
之所以要枚举 \(l, r\),是因为相同的数在 \(d\) 中顺序时不贡献的(1 1 只算一次。)因为 \([l, r]\) 的每个 \(i\) 贡献一样,可以先枚举 \(l, r\),算出贡献再加到 \(i\) 上面。
时间复杂度:\(O(n^3m)\)? 还是 \(O(n^2m \log n)\) 不清楚。
可惜因为多乘个 \(i\) 时忘记取模爆 ll 了。该死!!
题解的做法是这样的。直接枚举 \(v\) 算方案数太难算了,计算 \(\ge v\) 的方案数再加起来即可。(我是 sb 没想到。)
枚举 \(v\),设 \(d\) 中有 \(k\) 个数恰好 $ \ge v$ 的方案数为 \(f_{k, v}\),那么对 \(b_{n - k + 1} \sim b_k\) 的贡献有 \(f_{k, v}\)。
\(f_{k, v}\) 时难算的,看到恰好要先到二项式反演,设 \(g_{k, v}\) 表示选出 \(k\) 个数 \(\ge v\) 的方案数(组合数算算即可)。
因为这个反演和 \(v\) 没有关系,可以令 \(s_k = \sum g_{k, v}\),对 \(s_k\) 做反演得到的是 \(\sum f_{k, v}\)。
时间复杂度:\(O(n^2 + m\log n)\)
- 注意,\(g\) 只有 \(O(m \log n)\) 项(实际更小),因为 \(k \le \frac{m}{v}\)(调和级数)。
- 二项式反演是 \(O(n^2)\) 的。
题解还说可以 min-max 容斥,但本质是一样的
总的来说,这个题还是挺不错的,用到了期望线性性 + 二项式反演,部分分使用容斥(更低档可以 DP)。枚举 \(b_i\),要想到求的是 \(\ge v\) 的方案数,而不是 \(= v\) 的(经典套路,但 sb 地的就是没想到。。。),再从枚举 \(b_i\) 转为枚举 \(v\),最后转化成一个可以使用二项式反演做的题。
浙公网安备 33010602011771号