ARC065C Manhattan Compass

题意: 给出平面上的 个点

记点 之间的曼哈顿距离为

有两个人(不区分),初始时分别在点

当两人在点 时,若存在点 满足 ,则在 的人可以移动到

求两人能达到的不同状态(位置无序对)总数。

,时限


,不难发现,在旅途中 是不会变化的,一直为

若某个人能到达点 ,则对于所有 ,无序对 都是可达的。

于是,只需判定每个点能否被到达。

对于某个已经被到达的点 ,检查所有 ,把他们也更新为可达点。

这可以用队列实现,并用 std::set 维护点(转切比雪夫距离更方便)。

每个点只会被删除一次,故复杂度为

写起来没啥难点,就是有点啰嗦。