正睿 NOIP 十连 Day 1 题解

正睿 NOIP 十连 Day 1 题解

感觉十连好难啊。(悲

A

签到题。首先我们看到有复杂的关系,但是我们立马想到连边,这样我们可以从 $ x $ 开始遍历。能到达的点的数量就是答案。

经过不太严格的证明发现,边的数量应该是不大的。所以应该是可行的。

注意 vector 存图会被卡,要用链式前向星。

B

这个题也是一个比较好玩的题,首先 $ 60 $ 分的做法是数位 DP,记录前 $ k - 1 $ 位,然后只需要判断是不是回文串即可,还需要记录是否顶上界。

$ 100 $ 分的做法似乎是建立一个 AC 自动机,然后把所有合法的回文串全部扔进去,记录在 AC 自动机上匹配到的位置就行了。当失配的时候直接一个 fail 指针指向下一个匹配的位置就行了。

C

首先考虑树怎么做,树的话只有一种路径,只需要特判 $ k $ 的值即可。

因为这个图是一个仙人掌,所以我们可以建立一个圆方树,对于方点,有两种经过这个点双的方式,一种是顺时针,一种是逆时针。

这样我们可以维护一个 $ val $,其中 $ val_i $ 表示从根节点到 $ i $ 节点中路径权值异或和,默认顺时针,如果想要变成逆时针,就异或这个环的异或和即可。

这样我们对于经过的每一个方点,都要考虑异或还是不异或。

所以我们用线性基维护这个东西。(怎么维护我就不会了,因为我也不会线性基)

D

$ 100 $ 分不会,只会 $ 50 $ 分。

首先考虑令 $ f_{i, j} $ 表示点 $ (i, j) $ 是否可达。然后我们发现这样空间太大。因为我们只需要考虑是否可达,所以可以优化一下空间。

令 $ f_i $ 表示当纵坐标是 $ i $ 的时候,能到达最大的横坐标。

这样我们只需要判断 $ f_{\max{y}} $ 是否 $ = \max {x} $ 即可。

然后考虑转移,首先我们扫描横坐标 $ x $,令 $ x $ 转移到 $ x' $,对于当前 $ x' $ 所对应的最小的 $ y $ 记作 $ y_0 $,对于 $ y \ge y_0 $ 的点,我们向右转移,只考虑横坐标的改动,对于 $ y < y_0 $ 的点,我们向右上转移。

最后考虑向上转移的情况,对每个 $ f_i $ 向上延伸,看能延伸到什么位置就行了。

正解似乎是用线段树维护,对于前面的操作可以转化为区间覆盖。

posted @ 2024-09-01 16:45  __Tzf  阅读(43)  评论(0编辑  收藏  举报