CF350C Bombs

题目描述

有一个机器人,它的任务是在一个正方形平面上销毁所有的炸弹。具体来说,平面上有 $n$ 个炸弹,第 $i$ 个炸弹位于坐标点 $(x_i, y_i)$。已知没有两个炸弹位于同一点,也没有炸弹位于 $(0,0)$。最开始,机器人位于 $(0,0)$。假设机器人的当前位置为 $(x, y)$,为了销毁所有炸弹,机器人可以执行三种操作: 1. 操作格式为“1 k dir”。执行该操作时,机器人将沿着方向 $dir$ 移动 $k$ ($k \geq 1$) 步。机器人只能沿着四个方向移动,分别为:右("R")、左("L")、上("U")、下("D")。每一步机器人可以从当前位置移动到以下点之一:$(x+1, y)$、$(x-1, y)$、$(x, y+1)$、$(x, y-1)$,分别对应上述方向。若移动路径上(除目的地外)某一个点存在炸弹,则禁止移动。 2. 操作格式为“2”。执行该操作时,机器人需将当前位置 $(x, y)$ 的炸弹放入一个特殊容器中。因此机器人可以从任意地点将炸弹带到其他地方。若当前位置没有炸弹,或容器中已装有炸弹,则禁止进行该操作。 3. 操作格式为“3”。执行该操作时,机器人需从容器中取出炸弹并销毁。只有当机器人位于 $(0,0)$ 时才能进行此操作。如果容器中没有炸弹,则禁止执行该操作。 请你帮助机器人找到一组最短的操作序列,使它能够销毁平面上的所有炸弹。

输入格式

第一行输入一个正整数 $n$($1 \leq n \leq 10^{5}$),表示平面上的炸弹数。 接下来 $n$ 行,每行包含两个整数 $(x_i, y_i)$($-10^9 \leq x_i, y_i \leq 10^9$),表示第 $i$ 个炸弹的坐标。保证没有两个炸弹在同一点,也没有炸弹在 $(0,0)$。

输出格式

输出一行一个整数 $k$,表示销毁所有炸弹所需的最小操作数。 接下来的 $k$ 行,每行描述一个操作。若有多种方案,你可以输出任意一种。保证存在一种方案满足 $k \leq 10^6$。

说明/提示

由 ChatGPT 5 翻译