AGC062D
首先曼哈顿转切比雪夫,每次可以走到一个正方形边框上。有解的一个必要条件是
- 若
\max{a_i}\le r 且\sum a_i\ge r ,则必然可以通过a 的一个子集走到距离起点=r 的正方形边框所有点上。
证明:
-
先尝试可以走到边框上:取
b\subseteq a 且\sum b_i\le r ,笔直地走向边框一侧,再取一个d\in a\setminus b 且d+\sum b_i\ge r ,向旁边走d ,由于d\le r 这肯定可以做到,朝原来的方向走r-\sum b_i 即可来到边框上。 -
根据事先走的
b ,走d 的方向可以增加或者是减去任意\left[0,\sum b_i\right] 的值,那也就是当d>\sum b_i 时有些点走不到,那为什么不在最开始把d 放到b 里呢?然后可以再反转b/d 走的方向即可走到边框上所有点。
再回头看最开始的结论,我们只需要通过一些不含
接下来考虑
-
走一些步到
r 的边框上。 -
在边框上浪费一些不用步(因为
r 取值范围的限制,这里肯定有交)。 -
走一些步回到原点。
那其实就是找两条无交的从原点到
-
若
\sum\limits_{x\in S,x\le r}x\ge r ,根据上面的引理,肯定可以做到,且可以走到边框上任意点。 -
否则必然会走
>r 的步,先来看看只走一次>r 的步d 的情况。那肯定是形如往一个方向走了一些步,然后再通过d 一步折返直接到边框上。如此要求走的d-r 的边框上,由于仅要求走的点在r 边框内,这里充要条件为\sum\limits_{x\in S,x\le r}x\ge d-r 。再找到最小的d ,就是只走一步>r 情况下的充要条件——实际上也是全部情况下的!如果不满足这个条件根本走不了>r 的步。进一步的,因为d>r ,你只需调整d 这一步在另一侧的步幅大小就可以走到边框上任意点。
由于