专栏文章

题解:CF2147B Multiple Construction

CF2147B题解参与者 1已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@minqwujt
此快照首次捕获于
2025/12/02 06:53
3 个月前
此快照最后确认于
2025/12/02 06:53
3 个月前
查看原文
博客链接:link
在很多同学心目中构造题一直很扑朔迷离,所以本题解着重讲答案的推导过程。
明显需要按某种特定顺序构造,又因为是 B 题,所以不会太复杂。因此,用可视化工具验证合法性就对快速解题很有帮助了。
观察题目要求:
对于每个整数 xx1xn1 \leq x \leq n),xx 两次出现的位置之间的距离是 xx 的倍数。也就是说,若 pxp_xqxq_x 分别是 xx 两次出现的位置下标,则 qxpx|q_x-p_x| 必须能被 xx 整除。
我们将其转化为:对于每个整数 xx 两次出现的位置之间的距离是 kxkx,其中 kk 是正整数。那么两个 xx 夹着的数的个数必须是 kx1kx-1。这样就发现题目要求其实是在对两个 xx 中间的数的个数做要求,可以想到合法数列应存在一定的嵌套结构,这里嵌套结构就是按一定方法把两个相同整数加到两侧并保持合法。容易想到尽量多的 xxkk 相同时易构造简洁且合法的嵌套结构。
设两个数 x,yx,y,满足 x+1=yx+1=yyny\le n。我们不妨假设 x a x 已经是个合法结构了,这里的 a 表示一个合法数列,长度为 k1x1k_1x-1。两个 yy 中间需要夹 k2y1=k2(x+1)1=k2x1+k2k_2y-1=k_2(x+1)-1=k_2x-1+k_2 个数。跟据上文的思考,我们不妨试着使 k=k1=k2k=k_1=k_2 来简化问题。若把已有的 x a x 夹到两个 yy 里面。那么 yy 中还需要夹 (kx1+k)(kx1+2)=k2(kx-1+k)-(kx-1+2)=k-2 个数,这时就很容易发现当 k=2k=2 时就可以把两个 yy 直接加到 x a x 两侧得到形如 y x a x y 的合法数列。对 y x a x y 进行扩展,可联想出形如 m−1 m−2 ... 1 x 1 2 ... m−1 的合法结构,其中 xx 表示任意大于等于 mm 的整数。
然后再思考 xx 处填什么,另一个 xx 放哪里。取上面结构的一半(即 x 的左侧或右侧): m−1 m−2 ... 11 2 ... m−1 ,发现其长度都为 m1m-1,当 km=1k_m=1 时可以被合法地夹在两个 mm。所以可以用 mm 替换 xx,并把另一个 mm 放在的该结构左边或右边得到 m m−1 m−2 ... 1 m 1 2 ... m−1m−1 m−2 ... 1 m 1 2 ... m−1 m 这一合法结构。
可以贪心地想让 mm 尽可能大,且最大时 m=nm=n。于是最终合法的构造为 n n−1 n−2 ... 2 1 n 1 2 ... n-2 n−1n−1 n−2 ... 2 1 n 1 2 ... n-2 n−1 n
以此题为例,我们可以找到简单构造题的通用思路:可以钦定已有一种部分合法方案,在思考将该方案可以如何拓展,从而到一种合法模板或直接得到最终答案
AI 使用说明
本题解并没有使用 AI。

评论

1 条评论,欢迎与作者交流。

正在加载评论...