题解:CF2147B Multiple Construction
博客链接:link。
在很多同学心目中构造题一直很扑朔迷离,所以本题解着重讲答案的推导过程。
明显需要按某种特定顺序构造,又因为是 B 题,所以不会太复杂。因此,用可视化工具验证合法性就对快速解题很有帮助了。
观察题目要求:
对于每个整数
x (1 \leq x \leq n ),x 两次出现的位置之间的距离是x 的倍数。也就是说,若p_x 和q_x 分别是x 两次出现的位置下标,则|q_x-p_x| 必须能被x 整除。
我们将其转化为:对于每个整数
设两个数 x a x 已经是个合法结构了,这里的 a 表示一个合法数列,长度为 x a x 夹到两个 x a x 两侧得到形如 y x a x y 的合法数列。对 y x a x y 进行扩展,可联想出形如 m−1 m−2 ... 1 x 1 2 ... m−1 的合法结构,其中
然后再思考 x 的左侧或右侧): m−1 m−2 ... 1 或 1 2 ... m−1 ,发现其长度都为 m m−1 m−2 ... 1 m 1 2 ... m−1 或 m−1 m−2 ... 1 m 1 2 ... m−1 m 这一合法结构。
可以贪心地想让 n n−1 n−2 ... 2 1 n 1 2 ... n-2 n−1 或 n−1 n−2 ... 2 1 n 1 2 ... n-2 n−1 n。
提交记录。
以此题为例,我们可以找到简单构造题的通用思路:可以钦定已有一种部分合法方案,在思考将该方案可以如何拓展,从而到一种合法模板或直接得到最终答案。
::::info[AI 使用说明] 本题解并没有使用 AI。 ::::