LOADING

正在加载,请稍候

2024暑假集训第一周总结

2024/7/21

迟来的第一周总结……

第一周一共打了四场比赛。整体感受是:还有很多知识点没学,或者学得不够深。八月之前应该会持续补新知识,八月之后再重点加深理解和熟练度。比赛前期大家能过的题差距不大,后期更多取决于知识点覆盖和掌握程度。

牛客多校一

这一场补了三个题。

A - A Bit Common

题意

给定 nnmmqq,其中 n,m5000n,m \le 5000q109q \le 10^9。从 [0,2m)[0,2^m) 中取数构成长度为 nn 的序列,要求序列中存在一个子序列,其按位与结果为 11。求方案数并对 qq 取模。

分析

由于 n,mn,m 都是 50005000,时间复杂度需要控制在 O(n2)O(n^2) 附近,因此可以考虑枚举子序列的长度。

假设子序列长度为 kk,则位置选择有 C(n,k)C(n,k) 种。一个数的按位与为 11 时,最低位必须为 11;多个数按位与为 11 时,它们最低位都为 11,其他位不能同时全为 11

剩下的 nkn-k 个数可以任意选择,因此得到公式:

k=2nC(n,k)(2k1)m12(m1)(nk)\sum_{k=2}^{n} C(n,k)(2^k-1)^{m-1}2^{(m-1)(n-k)}

组合数用递推式预处理,枚举序列计算答案,整体时间复杂度约为 O(n2)O(n^2)。这题本身不算难,主要还是组合计数推式子的训练不够。

B - A Bit More Common

题意

题意和范围与 A 题类似,区别是要求序列中存在两个按位与结果为 11 的子序列,计算满足条件的方案数。

分析

这题可以沿用 A 题的计数思路,但需要额外处理两个子序列之间的重叠关系。相比 A 题,难点不在组合数本身,而在于如何避免把同一组序列重复计入多个子序列条件中。