AT_ahc046_a [AHC046A] Skating with Blocks

题目描述

有一个由 $N \times N$ 个格子组成的滑冰场。左上角格子的坐标为 $(0,0)$,向下 $i$ 格、向右 $j$ 格的位置坐标为 $(i,j)$。$N \times N$ 格子的外部全部被障碍物包围,无法通过。初始状态下,$N \times N$ 格子内部没有任何障碍物。 你现在位于初始位置 $(i_0, j_0)$,需要按顺序依次访问指定的目的地 $(i_1, j_1),\ (i_2, j_2),\ \dots,\ (i_{M-1}, j_{M-1})$。 每一回合,你可以指定一个方向(上下左右),并选择以下三种操作之一执行: - **移动**:向指定方向相邻的格子移动一格。移动目标格子不能有障碍物。 - **滑行**:向指定方向直线滑行,直到撞到障碍物为止。 - **更改**:对指定方向相邻的格子,如果没有障碍物则放置一个障碍物,如果已经有障碍物则移除。不能指定 $N \times N$ 格子的外部。你也可以在当前或未来的目的地上放置障碍物,但那样的话,必须先移除障碍物才能访问该格子。 如果通过“滑行”经过了目的地,并不会视为访问了该格子。只有通过“移动”到达该格子,或“滑行”并在该格子停下,才算访问了目的地。 必须按照指定顺序访问所有目的地。如果提前经过了后面的目的地,并不会视为访问,等到轮到该目的地时还需要重新访问。 最多可以执行 $2NM$ 回合操作。请尽可能用最少的回合数,按顺序访问所有目的地。

输入格式

输入通过标准输入按以下格式给出。 > $N$ $M$ $i_0$ $j_0$ > $i_1$ $j_1$ > $\vdots$ > $i_{M-1}$ $j_{M-1}$ - 所有测试点中,$N=20$,$M=40$。 - 初始位置和所有目的地的坐标 $(i_k, j_k)$ 满足 $0 \leq i_k, j_k \leq N-1$,且两两不同。

输出格式

每一回合选择的操作和方向,分别用一个字母表示。 **操作** - 移动:`M` - 滑行:`S` - 更改:`A` **方向** - 上:`U` - 下:`D` - 左:`L` - 右:`R` 第 $t$ 回合($t=0,1,\dots,T-1$)的操作和方向分别为 $a_t$、$d_t$,请按如下格式输出到标准输出。 > $a_0$ $d_0$ > $a_1$ $d_1$ > $\vdots$ > $a_{T-1}$ $d_{T-1}$

说明/提示

### 得分 设输出的操作序列长度为 $T$,成功访问的目的地数量为 $m$,则得分如下: - 若 $m < M-1$,得分为 $m+1$。 - 若 $m = M-1$,得分为 $M+2NM-T$。 总共有 150 个测试用例,所有测试用例的得分之和为最终提交得分。如果有任意一个测试用例输出不合法或超时,则整份提交判为 WA 或 TLE。比赛期间以最高得分决定最终排名,比赛结束后不进行系统测试。若多名参赛者得分相同,则排名相同,与提交时间无关。 ### 输入生成方法 初始位置和目的地的生成方法如下: 首先将 $N^2$ 个格子的所有坐标随机排列。取排列后的前 $M$ 个,依次作为 $(i_0, j_0), (i_1, j_1), \dots, (i_{M-1}, j_{M-1})$。 ### 工具(输入生成器与可视化工具) - [网页版](https://img.atcoder.jp/ahc046/EuNd3uow.html?lang=ja):比本地版性能更高,支持动画显示和手动操作。 - [本地版](https://img.atcoder.jp/ahc046/EuNd3uow.zip):需要[Rust语言](https://www.rust-lang.org/ja)编译环境。 - [Windows 版编译好的二进制文件](https://img.atcoder.jp/ahc046/EuNd3uow_windows.zip):如果不方便搭建 Rust 环境可使用此版本。 比赛期间禁止分享可视化结果、讨论解法或思路。请注意遵守规则。 由 ChatGPT 4.1 翻译