Loading

我是大糖丸

这里是考试周总结。

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)\) 合并的,然后我们分类讨论一下:

  1. 如果两条边都是环上的:正好链被断成两个,我们直接线段树查询即可。
  2. 如果一条边是环上的,一条边是树上的:我们发线 DFS 序可以直接合并,找到其他子树直接合并即可,这里我的想法是直接三度化然后这样合并就是 \(O(1)\) 的了。

Contest Round 2

哪吒闹海

我们考虑一个事情,就是这个问题相当于你每个 \(x\) 向前面覆盖 \(t_x\) 个格子,然后看是否能够填满,否则操作次数就是还没有填的地方的个数,这个东西我们用个数组去维护一下就好了(就是多米诺骨牌)。

重排题

\(11\) 的倍数有个性质:奇偶位上的数的和 \(\bmod 11\) 同余。

然后我们可以用一个背包解决这个问题,我们先把前面的位贪心处理,然后后面 \(20\) 位直接暴力 DP,根据很多数据说明这样肯定可以得出最优解(在有解的情况下)。

邮箱

我考虑这么一个事情,文件夹是死而不能复生的,所以我们在匹配玩一个后发现目前首个文件夹已经被放满了,然后我们就直接跳到下一个去匹配,不难发现这样一定是最优的,然后用数据结构模拟就好了。

脱单计划

考虑一个朴素的网络流建边,然后我们发现图上距离的正负性只有 \(4\) 种,然后我们建四个中转点,然后连边,这样边数就是 \(O(n)\) 的。

具体细节自己仔细考虑一下就好了。

Contest Round 3

A

我们直接枚举一个连通块内的点连向 \(1\) 连通块内的点和 \(n\) 连通块内的点的最小代价就好了。

考试的时候挂了因为没有考虑到其他连通块。

B

这里有两种做法:

  1. 你考虑容斥做,容斥玩后就变成一个只跟 \(a_i + a_j\) 或者 \(b_i + b_j\) 有关的东西,这个时候你组合一下记个数即可。
  2. 你考虑差分拆贡献做,我们发现我们的差分其实是独立的,我们把相同位置的差分个数求出来,这样就可以值域平方做了。

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\) 满足:

\[-\frac{c}{a + b} - \frac{(a + b)^2}{c^2} \equiv t + 1 (\bmod p) \]

我们令 \(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\) 怎么做,我们注意到:

\[(a^2 + b^2)(c^2 + d^2) = (ac + bd)^2 + (ab - cd)^2 \]

于是我们可以直接递推去做了,不难发现不存在 \(-1\) 情况。

WTP 的成神之战

首先我们差分完后发现就是一个推箱子问题,我们可以直接使用阶梯 Nim 去做,具体来说就是把与 \(n\) 奇偶性相同的位置上的差分值异或起来s是否为 \(0\)

WTP 的通缉

注意到正数权值的树的直径是有合并性质的,我们利用线段树维护一段区间的树的直径,然后我们将两段区间的树的直径求出来后我们再合并一下直径就好。

posted @ 2024-08-24 09:25  Alexande  阅读(29)  评论(0)    收藏  举报