更新中。
加训构造。/fendou
发现我们如果把一个 的矩阵填满 ,不会有影响。
当 为 的倍数,直接填就可以了。
当 为奇数显然无解,因为你无法让每行奇偶性相同。
当 除 余 ,如果 为 或 时无解。
不然的话,我们可以在一个 的矩形里把 ,,,,, 填 ,剩下直接填。
注意到 时这时爆的。我们可以在 的矩形里多填 ,,,。
题意其实就是每位填的数要保证 。
考虑从后往前填数,每次只要把任意满足条件的填入即可。
注意到 其实相当于 ,然后就可以直接枚举做了。
假如我们放 个后,假设放在左上角,使得右下只有 个格子没被覆盖,我们要用对角线去覆盖它们。
个格子有 条对角线,所以 ,即 。
当 ,我们可以考虑先在 放一个后,然后横坐标 ,纵坐标 ,再放一个后,不停地放,直到出右上角的 的矩形为止。然后我们再横坐标 ,纵坐标为 的点开始用同样的方式放。
为什么这是对的?我们不妨给对角线标号,令 所在的对角线为 ,它左边的对角线分别为 ,右边的对角线分别为 ,我们第一个在 的后覆盖了对角线 ,后面每次的后覆盖了上一条 的对角线。而在 的点覆盖了对角线 ,后面每条覆盖了上一条 的对角线。
首先,只有当两个数模 都为 或都为 时才可能不合法。
我们将这棵树黑白染色,两个点相距为 必定一个为黑点一个为白点。
当黑点和白点数量都大于 ,我们可以模 余 全填黑点,模 余 全填白点,剩下随便填。
当黑点和白点数量中有一个小于 ,不妨假设时黑点。我们可以把黑点用模 余 的数填满,剩下全填白点。
有一个比较牛的构造。
考虑将序列 排序后平均分为 段。
-
对于第 段,构造 ,。
-
对于第 段,构造 ,。
-
对于第 段,构造 ,。
解释一下为什么这是对的。
对于 ,显然第 段和第 段的是两两不同的,符合要求。
对于 ,第 段和第 段内部一定是单调递增的,而第 段所有数一定大于第 段,所以两两不同,符合要求。
有一个简单的想法是构造一个序列满足 且 。容易想到构造 。
但如果存在 是会爆。所以我们可以把 中的最大值移到 的位置,同时要满足 ,这样就能保证不存在整除关系。
如果 是会爆,因为 。所以我们让 , 就行了。
但当所有 相等时不存在一个这么一个最大值。可以证明,只有 时才有解。
如果 ( 不为 ),一定存在 ,即 ,那所以 必为 的倍数,则必有 ,所以不成立。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步