前言

  • powered by 翘课协会

  • 感谢 @pitless0514 @Zyh_277 的题目,感谢 @喜多鱼 的物资准备

  • 出题组预期难度

    E<G<K<H<J<D<A<I<B<F<C

  • 实际难度

    G<E<K<H<D<J<I<B<F<A<C

正文

easy

E:等差数列

每次找到一段连续的最长等差数列 ,假设序列长度为 ,对答案的贡献就是 ,之后继续在 的后面找就行

记得加上长度为 的等差数列

具体细节看代码

G:maximum independent set(easy version)

答案就是小于等于 的素数个数

质数筛法

晒好质数后,做一个前缀和即可直接统计小于等于 的素数个数

medium-easy

K:足球

二分初始容量

分别维护左右箱子的剩余量以及通用的容积,如果对应的箱子还有空余,则直接放入,否则令多出的球占用通用的容积即可

通用的容积在每次放入球之前加一

时间复杂度:

H: maximum independent set(hard version)

诈骗题

首先证明 个数字为何不能选取 个数字

把每个数字都分解为 的形式,其中 是奇数,这样 个数字可以分为 组,每组数字只能选取一个,根据鸽笼原理,最多选取 个数字

其次构造大小 的集合

直接输出 即可

J:ptsd

数据结构优化 的板子

表示选取子序列中最后一个数字为

枚举 ,然后更新

值域线段树维护即可

D:相对分子质量

是一道给 写不动其他题 或者 卡某个签到题 的选手拉回差距的题目

但是看起来卡住了一些人()

medium

I: maximum independent set(extremely hard version)

选取较大的数只有可能与一个数的和是 的幂次,但是选取较小的数可能影响更多,所以需要贪心的选取较大的数字

考虑对于一个区间 ,找到最大的 ,如果区间 数字全选,那么区间 中间的数字全不选(会与选择的数字的和组成

之后考虑区间 的子问题即可

时间复杂度:

B:中位数(easy version)

考虑最后一定只剩下一个数字 是满足条件的

令小于这个数字的数变为 ,大于这个数字的数变为 ,做前缀和,记前缀和数组为

设这个数字位置为 ,最优方案下,第一次一定是找到 左端的第一个 和右端的第一个 ,有 ,然后对区间 进行操作

之后每次操作,向左移动一次 或者向右移动一次 ,每次移动的要求是保证

假设有 使得 ,有 使得 ,总操作次数就是 ,方案数为

需要特殊考虑 的情况,这时第一次操作可以只使区间变为 或者 ,最多操作数变为 ,方案数为

medium hard

A:匹配

  1. ,这个数对 取模为

  2. ,这个数对 取模为 或者

考虑如何取到

对于 的剩余类,每个余数 都恰好有两个数字与其对应(),如果选择了其中的一个,一定要保证另外一个不选;如果其中一个不选,一定要保证选择另外一个

拿一组数据举例子

3
1 5
2 3
6 4

其中令 为一组, 为一组, 为一组

首先选取 不能选,强制选取 不能选,强制选取 不能选,强制选取

会发现,这种关系一定会形成一个环

这样子一直遍历下去,一定能保证每组数字恰好选取了一个

如果现在选取的数字和是 的倍数,直接输出答案即可;如果不是 的倍数,那么每一组交换选取的数字即可(根据题解开篇的等式可推出)

时间复杂度:

F: multiply

注意到我们并不关心最后一个子序列具体乘积是多少,只关心这个子序列乘积是否

所以我们设计状态为 表示当前考虑到了 ,子序列乘积需要 才能 的方案数和权值。

此时对于 的子序列乘积,他们都会等于 ,因为此时表示子序列乘积 ,即子序列乘积已经大于等于

而剩下的可能状态其实就是对每个 ,都有 ,注意到这是一个整除分块的形式,经典结论可知只会有 级别的不同的数,单独处理之后,每次枚举这些状态和当前的值 ,刷表转移即可,转移方程看具体代码

时间复杂度:

整除分块学习

其实这题的预期是 难度,但是不少精通 的选手切的很快哇

hard

猫猫头说不清,所以

@Zyh_277 催更

(这位鸽鸽在准备下周的 港澳,大家不要催他了,为他加油!!!)