专栏文章
AGC062D
AT_agc062_d题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minw0m42
- 此快照首次捕获于
- 2025/12/02 09:16 3 个月前
- 此快照最后确认于
- 2025/12/02 09:16 3 个月前
首先曼哈顿转切比雪夫,每次可以走到一个正方形边框上。有解的一个必要条件是 ,否则走一次 长的步永远都回不到原点;其实这也是充分的,我们先给出一个重要引理:
- 若 且 ,则必然可以通过 的一个子集走到距离起点 的正方形边框所有点上。
证明:
-
先尝试可以走到边框上:取 且 ,笔直地走向边框一侧,再取一个 且 ,向旁边走 ,由于 这肯定可以做到,朝原来的方向走 即可来到边框上。
-
根据事先走的 ,走 的方向可以增加或者是减去任意 的值,那也就是当 时有些点走不到,那为什么不在最开始把 放到 里呢?然后可以再反转 走的方向即可走到边框上所有点。
再回头看最开始的结论,我们只需要通过一些不含 的步走到 的正方形边框上,然后可以浪费掉一些无用步(相当于在当前位置每次画一个正方形边框,然后走到其和 的正方形边框相交处,由于其边长 肯定有交),最后再通过 一步回到原点。进一步的,可以发现最终答案 在 中,因为 无论如何走一个 都走出正方形了。
接下来考虑 的判定性问题。继承上面的思路,走的过程形如:
-
走一些步到 的边框上。
-
在边框上浪费一些不用步(因为 取值范围的限制,这里肯定有交)。
-
走一些步回到原点。
那其实就是找两条无交的从原点到 边框上的路径了(其实应该要求终点相同,但我们下面仍然会说明,如果可以走到边框,那就可以走到边框上的任意点)。考察一个集合 是否可以通过其的一个子集走到 的边框上:
-
若 ,根据上面的引理,肯定可以做到,且可以走到边框上任意点。
-
否则必然会走 的步,先来看看只走一次 的步 的情况。那肯定是形如往一个方向走了一些步,然后再通过 一步折返直接到边框上。如此要求走的 的边框上,由于仅要求走的点在 边框内,这里充要条件为 。再找到最小的 ,就是只走一步 情况下的充要条件——实际上也是全部情况下的!如果不满足这个条件根本走不了 的步。进一步的,因为 ,你只需调整 这一步在另一侧的步幅大小就可以走到边框上任意点。
由于 ,即当 相同时,有 的步候选总比没有 的步限制更松。从小到大扫 ,我们想要找到两条合法路径,肯定是 的数中最小值和次小值留分别给两条路径,对于 的数做一个背包即可,容易判定合法性。复杂度 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...