我是大糖丸
这里是考试周总结。
Contest Round 1
木积
description
给你 \(n\) 个数 \(a_i\),你需要求出可以选出的最大子集大小,使其中的数两两之间互质。
\(1 \le n, a_i \le 10^3\)。
solution
首先题目给这么小的数据范围不是当饭吃的,首先我们考虑 \(a_i \le 1000\) 有没有啥特殊的性质。
容易想到的一个做法是,对 \(1000\) 内的所有质数直接状压,然后对每个数都跑个 DP,这样子是对的,但是 \(1000\) 内的质数个数也绝对不少,会直接 out 掉。
然后我们考虑经典减少质因子个数的思路:某个数 \(x\) 的 \(>\sqrt x\) 的质因子最多只有一个!证也很好证,就是根据唯一分解定理,入如果有两个质因子肯定都在 \(x\) 的质因数分解序列里,但是两个相乘就爆 \(x\) 了,所以最多只有一个。
然后就很好做了,你考虑 \(\sqrt {1000}\) 也就是大概 \(35\) 内最多只有 \(11\) 个质数,这下你就可以状压了,但是如果 \(> sqrt(1000)\) 咋办呢?考虑这样的质数也不到 \(1000\) 个,在做 DP 的时候,我们可以从每个大于 \(35\) 的质数序列中选一个进行转移,他们说有点类似背包?
远游
description
你有一个大小为 \(3 \times n\) 的网格,你现在往里面随机放入 \(1 \times 1\) 障碍和 \(2 \times 2\) 的障碍,如果走到第 \(i\) 列,那么贡献就是 \(i^k\),问可能的期望贡献。
\(1 \le n \le 10^{18}\)。
solution
首先看到这个题目你可以想到一个 DP 状态 \(f_{i, 0/1, 0/1, 0/1}\),表示到了第 \(i\) 列的状态,然后考虑把后缀的信息求过来做一个前缀和,这样你就会 \(O(n)\) 咋做了。
但是我们发现这个 DP 式子是很经典可以用矩阵快速幂优化的,于是我们把它写成一个大小为 \(8^3\) 的一个矩阵,但是你注意到 \(T = 500\),所以还是不能过。
题解给出的做法是优化状态,我选择暴力打出矩阵去掉稀疏行列最后优化到一个不明复杂度。
蒟蒻座蒟蒻星
description
就是给你一颗基环树,每次让你断掉两条边后求两颗树的树的直径的和。
\(1 \le n \le 10^5\)。
solution
考场时以为是树的重心就跳了qwq。
然后我们发现这么一个事情,就是我们将基环树的环找出来,然后断环成链,对于链上每个结点维护一颗线段树,表示这个点的子树中的树的直径端点,根据经典引理,树的直径是可以 \(O(1)\) 合并的,然后我们分类讨论一下:
- 如果两条边都是环上的:正好链被断成两个,我们直接线段树查询即可。
- 如果一条边是环上的,一条边是树上的:我们发线 DFS 序可以直接合并,找到其他子树直接合并即可,这里我的想法是直接三度化然后这样合并就是 \(O(1)\) 的了。
Contest Round 2
哪吒闹海
我们考虑一个事情,就是这个问题相当于你每个 \(x\) 向前面覆盖 \(t_x\) 个格子,然后看是否能够填满,否则操作次数就是还没有填的地方的个数,这个东西我们用个数组去维护一下就好了(就是多米诺骨牌)。
重排题
\(11\) 的倍数有个性质:奇偶位上的数的和 \(\bmod 11\) 同余。
然后我们可以用一个背包解决这个问题,我们先把前面的位贪心处理,然后后面 \(20\) 位直接暴力 DP,根据很多数据说明这样肯定可以得出最优解(在有解的情况下)。
邮箱
我考虑这么一个事情,文件夹是死而不能复生的,所以我们在匹配玩一个后发现目前首个文件夹已经被放满了,然后我们就直接跳到下一个去匹配,不难发现这样一定是最优的,然后用数据结构模拟就好了。
脱单计划
考虑一个朴素的网络流建边,然后我们发现图上距离的正负性只有 \(4\) 种,然后我们建四个中转点,然后连边,这样边数就是 \(O(n)\) 的。
具体细节自己仔细考虑一下就好了。
Contest Round 3
A
我们直接枚举一个连通块内的点连向 \(1\) 连通块内的点和 \(n\) 连通块内的点的最小代价就好了。
考试的时候挂了因为没有考虑到其他连通块。
B
这里有两种做法:
- 你考虑容斥做,容斥玩后就变成一个只跟 \(a_i + a_j\) 或者 \(b_i + b_j\) 有关的东西,这个时候你组合一下记个数即可。
- 你考虑差分拆贡献做,我们发现我们的差分其实是独立的,我们把相同位置的差分个数求出来,这样就可以值域平方做了。
C
首先不难发现一定要从 \(1\) 到叶子,然后我们一共能选的得分就只有前叶子节点数个。
然后我们贪心,能选取就选取,然后跟子树内叶子节点数取个 \(\min\) 即可。
D
首先我们发现只有 \(6\) 种可能的情况,你就先把 \(A\) 全部换完,再把 \(B\) 全部换完,然后 \(C\) 这个时候就已经自动换完了。
E
我们考虑一个数最远左右能到的点位 \(l_i, r_i\),如果直接这么计数是有重复的,但是我们把这个东西丢到平面上,然后就是计算矩形面积并的事情了。
F
我们考虑设计 DP 状态为 \(f_{i, j}\) 表示到 \(i\) 次操作,左端点为 \(j\) 时右端点最远是多少,不难发现这样子贪心一定是最优的,然后我们直接预处理前缀后缀信息 DP 即可。
Contest Round 4
作业
直接状压即可,发现是没有顺序的,所以复杂度就变成了 \(O(n \times 2^n)\) 的了。
树
不难发现问题的本质就是让我们求区间路径并的权值。
区间可以用线段树维护,然后两条路径合并仍然是一条路径,并且端点只会在原端点和原端点的 LCA 处,然后我们建立一颗虚树,直接做就完了,如果是考虑 LCA 复杂度的话,那就是 \(O(n \log_2 n)\)。
然后如果我们使用 \(O(1)\) LCA 的话就是单 \(\log_2\) 了。
三元组
合并计数题。
Contest Round 5
product
考虑 \(\binom{n}{m} \mod p \ne 0\) 的本质是 \(p\) 进制下每一位 \(n\) 都比 \(m\) 大。
然后我们发现 \(23333\) 是一个质数且一个数的 \(23333\) 进制下最多只有两位。
然后我们容易把 \(O(n^2)\) 的一个 DP 做法通过二维树状数组换成 \(O(n \log^2 V)\) 小常数。
christmas
考虑排列连边是若干个环,然后我们要选择一些点使得覆盖的环最少或者最多。
我们现在最少就是要尽量用环的大小凑出这个 \(k\),否则贡献就是 \(k + 1\),然后我们用背包记录一下就好了。但是我们发现这么做是 \(O(n^2)\) 的,但是由于环的大小总和是 \(O(n)\),所以我们可以看成多重背包用二进制优化去做,还能拿 bitset 优化一下。
然后如果最大我们就偶环奇环分开考虑贪心就好了。
mex
考虑路径并还是路径。
我们直接维护一段连续值所构成的链(用线段树做),然后我们发现 \(mex\) 具有单调性就直接线段树上二分就好了。
然后线段树的 pushup 要常数小一点,否则过不去。
Contest Round 6
克洛托
纯属是我糖丸了。
就是我们要对于每个数都找到一个最远的右括号。然后要使得分开的两个区间都是合法的。
不难发现合法区间就是消消乐,然后我们直接上哈希。
然后我们按字符和哈希值划分为一个等价类。
然后你就可以二分在区间内最右的合法右端点。
拉克西斯
不会。
阿特洛珀斯
不会。
Contest Round 7
由于是 LiWenX 的题有版权问题就不写上来了qwq。
Contest Round 8
无力的小丑
发现总重量始终不超过 \(5000\),所以你对于每一类暴力做背包然后暴力合并复杂度就是对的了。
悲哀的人们
肯定是先二分的。
然后我们称构成 \(mex\) 前面的元素称为待选元素,那么待选元素一定是排完序后序列中连续的一段,然后我们还发现所有 \(a_i\) 互不相同,这也就保证了前面一段的贡献始终比 \(0, 1, ..., k\) 小,后面一段始终比 \(k + 1, k + 2, ..., ans - 1\) 要打,我们再次二分一下,然后用前缀和记录一下就好了。
然后你发现两个二分是独立的,于是就是 \(O(n \log_2 n)\) 了。
可怜的木偶
首先我们发现在平面上走来走去?对于一个数加来加去?能构成的最小正整数是多少?这个问题有一个经典结论那就是最小元素肯定是 \(a\) 的 \(\gcd\),然后这个问题就变成了所有序列的 \(\gcd\) 的和是多少,我们发现枚举一下倍数然后简单容斥一下就 A 了。
可笑的 wenhao801
对于一个点来说,我们只考虑比他低的点,首先我们发现一个点能够覆盖到的所有点一定是一个矩形,然后两个边界你都可以二分出来,你就可以直接上主席树做就完了,但是要注意一下空间的控制。
Contest 9
传教
首先你发现异或是有交换律与结合律的,所以相当于我们给每个长度为 \(k\) 的区间分配一个值,看非 \(0\) 区间有多少个。
具体来说,我们从左往右考虑,每次总是把最左边的一个数消成 \(0\),这样一定是最优的,然后现在问题就是数 \(0\) 了。
你考虑更改一个位置肯定只会对一段区间的贡献进行修改,也可能是有奇偶性的,于是注意到值域是很小的,于是我们用分块维护不同的奇偶性,然后每个块开个桶就做完了。
当然还是比较难写的。
方程
注意到最后的式子可以写成对于一组 \(a, b, c\) 来说,只需存在一个 \(t\) 满足:
我们令 \(m = \frac{c}{a + b}\),那么我们只需要求出每种不同的 \(m\) 的个数就行了。
当然如果是 \(a + b \equiv i\) 可以用 NTT 求解,如果是上面还有 \(c\) 的话就转化为原根然后转化为指数上的减法对于指数做一个 NTT 就可以了。
Contest 10
我是唐氏儿。
WTP 的⼤洗牌
首先发现 \(\prod (a_i^2 + b_i^2)\) 这个式子是有特性的,我们可以两两合并成新的 \(a_i, b_i\),然后一路合并下去,这样问题就简化成了 \(n = 2\) 怎么做,我们注意到:
于是我们可以直接递推去做了,不难发现不存在 \(-1\) 情况。
WTP 的成神之战
首先我们差分完后发现就是一个推箱子问题,我们可以直接使用阶梯 Nim 去做,具体来说就是把与 \(n\) 奇偶性相同的位置上的差分值异或起来s是否为 \(0\)。
WTP 的通缉
注意到正数权值的树的直径是有合并性质的,我们利用线段树维护一段区间的树的直径,然后我们将两段区间的树的直径求出来后我们再合并一下直径就好。

浙公网安备 33010602011771号