ARC065C Manhattan Compass 发表于 2025-02-22 更新于 2025-02-26 分类于 算法竞赛 , 题 , AtCoder 阅读次数: 题意: 给出平面上的 个点 。 记点 之间的曼哈顿距离为 。 有两个人(不区分),初始时分别在点 。 当两人在点 时,若存在点 满足 ,则在 的人可以移动到 。 求两人能达到的不同状态(位置无序对)总数。 ,时限 。 记 ,不难发现,在旅途中 是不会变化的,一直为 。 若某个人能到达点 ,则对于所有 的 ,无序对 都是可达的。 于是,只需判定每个点能否被到达。 对于某个已经被到达的点 ,检查所有 的 ,把他们也更新为可达点。 这可以用队列实现,并用 std::set 维护点(转切比雪夫距离更方便)。 每个点只会被删除一次,故复杂度为 。 写起来没啥难点,就是有点啰嗦。