abcdeffa's Blog

当局者迷,旁观者清。

0%

GDKOI2021 J 组简要题解

来自场外选手的口胡。

关于这个为什么由「口胡题解」改名成「简要题解」,是因为我不口胡了。代码会每题单独开篇文章放出来。

Day 1

T1

显然随便分讨一下即可。

T2

这个菜鸡第一时间想到的是两个 $\log$ 的屑做法。

考虑二分出左边和右边的挡板位置,然后可以用线段树来检验二分的答案的合法性。然后预处理一下前缀和即可做到 $O(q \log^2 n)$。

将询问离线,运用单调队列可以做到 $O(q \log n)$。

T3

考虑如果 $(a, c)$ 和 $(b, d)$ 都是合法匹配对(其中 $a \leq b \leq c \leq d$),那么显然 $(a, d)$ 和 $(b, c)$ 都是合法匹配对。

然后考虑基于此的贪心。

将给定序列排序,得到 $a_1∼a_n$,然后记 $a_l$ 为当前最小的未确定是否保留的数,$a_r$ 为当前最大的未确定是否保留的数。

然后如果 $(a_l + a_r)$ 小于限制的下界,那么 $a_l$ 可以找到更好的那个 TA,删去 $a_l$。

如果 $(a_l + a_r)$ 在限制范围内,那么同时保留它们两个。

如果 $(a_l + a_r)$ 大于限制的上界,那么 $a_r$ 可以找到更好的那个 TA,删去 $a_r$。

利用双指针可以做到 $O(n \log n + n)$。

T4

考虑如果你当前有 $w$ 元的话,肯定是买一张 $w$ 元的通票最优。

因为你如果买的是一张 $a$ 元的通票,再单独买了一张 $b$ 元的票的话,实际上你可以买一张 $(a + b)$ 元的通票,也能过掉 $b$ 元的这条边。

然后考虑将询问离线,然后问题就变成了不断加边,询问一个点所在连通块中的点的数量。

用并查集加一个计数数组即可做到。

Day 2

T1

先质因数分解一下,然后把 2 和 5 同时消去。最后 暴力 / 快速幂 / 循环节 随便算答案即可。

T2

拿个队列存一下当前没确定是否放儿子的节点,然后直接模拟一下即可,在过程中存一下一个节点的值域限制即可。

正确性可以证明。

T3

很有意思的一道题啊。

考虑设 $f_{i, j, 0 / 1, 0 / 1}$ 表示当前在点 $i$,往上跳 $2^j$ 步,在这一段的起点处在主世界 / 异世界,结尾处在主世界 / 异世界的情况下所需的最小代价。

然后对这几种情况进行转移即可。写这题的转移真的很舒爽,因为长度很统一。

解法来自 lxl,让我们一起来膜他。

当然本题也有正常一点的倍增做法,在此就不赘述了。

由于我被卡常了,所以……

T4

比赛的时候写了个假构造,还过了大样例……

考虑一下,偶数肯定平分,现在要看奇数平分不了的多出来的那个 1 给谁。

那就先把 $a_{i, j}$ 模 2 咯。

行和列和都有限制?考虑二分图一下。

一个套路是,如果 $(i, j)$ 为 1。那么就把行点 $i$ 和列点 $j$ 之间连边,然后对这个二分图黑白染色一下即可。

当然你写网络流也不是不行。

Day 3

T1

直接求出每条边的边长,然后搜索找对应边判一下比例是否相等即可。

当然你也可以排个序然后判比例。比赛的时候我降智了写了第一种写法。

T2

考虑设 $sum = \sum_{(a_i - 1)}$,且当前进行了 $p$ 科考试。

其中 $a_i$ 表示的是他在第 $i$ 科考试的排名。

考虑最好情况:如果 $sum \leq (n - 1)(p - 1)$ 的话,说明满分的个数还不够分给超过 $(n - 1)$ 个人 $(p - 1)$ 科,然后你可以让他们在第 $p$ 科全部爆 0。然后小虾笼就是第一喽。

否则这科最少有 $[sum - (n - 1)(p - 1)]$ 人满分,并且他们在前面 $(p - 1)$ 科全都满分了,那他的排名就是 $[sum - (n - 1)(p - 1) + 1]$ 咯。

考虑最坏情况:只要有人超过他,那他就比他高到不知道哪里去了,后面即使比他低也是无关紧要的咯。

T3

考虑套路的挪一下 $\sum$ 的位置:

令 $g(i) = \sum_{j|i} \lambda(j)$,则原式等于 $\sum_{k = 1}^n \sum_{i|k} \lambda(i) g(i)$。

令 $d = i$,则原式可进一步化为 $\sum_{k = 1}^n \sum_{d|k} \lambda(d) g(d)$。

考虑枚举 $d$,则这个式子的值等于 $\sum_{d = 1}^n \lambda(d) g(d) \lfloor \dfrac{n}{d} \rfloor$。

由于 $\lfloor \dfrac{n}{d} \rfloor$ 显然最多只有 $\sqrt{n}$ 种取值,然后我们又发现 $\lambda(d) g(d)$ 的前缀和是可以 $O(1)$ 求的,那么就可以随便算咯。

话说我上一次在考场上独立推出数论题还是一两年前的事情。

其实这题有人打表玩出来了,答案也可以写为 $\sum_{i = 1}^{\lfloor \sqrt{n} \rfloor} \lfloor \dfrac{n}{i^2} \rfloor$。

T4

考虑设 $f_{i, j}$ 表示当前确定了首尾 $i$ 位,且当前的前缀和比后缀和多 $j$ 的序列的方案数。

然后你考虑当 $n$ 是奇数的情况,那就把 $n$ 先减一,然后再把算出来的答案乘个 $(n + 1)$ 就好了,因为中间的那一位填啥都行。

如果你的转移写的不好看的话那么是 $O(n^5)$ 的,打个表也能过。

写的好看的话就是枚举当前的两个数的差,这样就是 $O(n^4)$ 的啦。

由于我比较菜,所以我选择直接打表。还挺快,一百多秒后表出来了。