AT_ahc052_a.[AHC052A] Single Controller Multiple Robots

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

有一个 N×NN \times N 的网格代表一个办公室。左上角格子的坐标为 (0,0)(0, 0),第 ii 行向下、第 jj 列向右的格子的坐标为 (i,j)(i, j)。N×NN \times N 网格的边界被墙包围,相邻格子之间也可能有墙。

你需要使用 MM 个机器人对所有格子进行打蜡。第 kk 个机器人的初始位置为 (ik,jk)(i_k, j_k),包括初始位置在内,机器人经过的所有格子都视为已打蜡。

所有机器人通过一个控制器同时操作。该控制器有 KK 个按钮,在开始打蜡操作前,你可以为每个按钮-机器人对配置五种可能的动作之一:向四个相邻格子移动(上、下、左、右)或原地不动。当按下某个按钮时,所有机器人会同时执行各自为该按钮分配的动作。不同机器人在同一个按钮下的动作可以不同。例如,可以将控制器配置为“按钮 0 时,机器人 0 向上移动,机器人 1 向下移动”。一旦打蜡开始,按钮分配不能更改。

如果机器人尝试移动但当前位置与目标格子之间有墙,则机器人保持原地不动。机器人之间不会相互干扰,多个机器人可以占据同一个格子。

你最多可以进行 2N22N^2 次操作。请设计按钮分配和操作序列,使所有格子都被打蜡,并尽量减少操作次数。

输入格式

输入通过标准输入给出,格式如下:

NN MM KK i0i_0 j0j_0 ⋮⋮ iM−1i_{M-1} jM−1j_{M-1} v0,0⋯v0,N−2v_{0,0} \cdots v_{0,N-2} ⋮⋮ vN−1,0⋯vN−1,N−2v_{N-1,0} \cdots v_{N-1,N-2} h0,0⋯h0,N−1h_{0,0} \cdots h_{0,N-1} ⋮⋮ hN−2,0⋯hN−2,N−1h_{N-2,0} \cdots h_{N-2,N-1}

  • 所有测试点中,N=30N=30,M=10M=10,K=10K=10。
  • (ik,jk)(i_k, j_k) 表示第 kk 个机器人的初始位置,所有初始位置互不相同。
  • 每一行 vi,0⋯vi,N−2v_{i,0} \cdots v_{i,N-2} 是长度为 N−1N-1 的二进制字符串。第 jj 个字符 vi,jv_{i,j} 表示格子 (i,j)(i, j) 与 (i,j+1)(i, j+1) 之间是否有墙(1 表示有墙,0 表示无墙)。
  • 每一行 hi,0⋯hi,N−1h_{i,0} \cdots h_{i,N-1} 是长度为 NN 的二进制字符串。第 jj 个字符 hi,jh_{i,j} 表示格子 (i,j)(i, j) 与 (i+1,j)(i+1, j) 之间是否有墙(1 表示有墙,0 表示无墙)。
  • 保证所有格子两两可达。

输出格式

首先输出按钮分配,格式如下:

c0,0c_{0,0} ⋯\cdots c0,M−1c_{0,M-1} ⋮⋮ cK−1,0c_{K-1,0} ⋯\cdots cK−1,M−1c_{K-1,M-1}

其中,ci,jc_{i,j} 是第 ii 个按钮被按下时,第 jj 个机器人执行的动作。必须是以下 5 种之一:

  • U:向上移动一格
  • D:向下移动一格
  • L:向左移动一格
  • R:向右移动一格
  • S:原地不动

然后输出操作序列,格式如下:

a0a_0 ⋮⋮ aT−1a_{T-1}

其中,ata_t 是 00 到 K−1K-1 之间的整数,表示第 tt 回合按下的按钮编号。

输入输出样例

  • 输入#1

    30 10 10
    13 25
    7 14
    17 22
    0 18
    29 1
    3 25
    14 22
    14 29
    26 2
    3 10
    00000000010000000000001000000
    00000000010000000000001000000
    00000000010000000000001000000
    00000000010000000000001000000
    00000000010000000000001000000
    00000000010000000000001000000
    00000000010000000000001000000
    00000000000000000000001000000
    00000000000000000000001000000
    00000000000000000000001000000
    00000000000000000000001000000
    00000000000000000000000000000
    00000000000000000000000000000
    00000000000000000000000000000
    00000000000000000000000000000
    00000000000000000000000000000
    00000000000000000000000000000
    00000000000000000000000000000
    00000000000000000000000000000
    00000000000000000000000000000
    00000000000000010000000000000
    00000000000000010000000000000
    00000000000000010000000000000
    00000000000000010000000000000
    00000000000000010000000000000
    00000000000000010000000000000
    00000000000000010000000000000
    00000000000000010000000000000
    00000000000000010000000000000
    00000000000000010000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    011111111111111111100000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    111111111110000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000

    输出#1

    L L L R U R S D L S
    R L L L D D L R D D
    D S R D D S U D U R
    L U S R D L S U L R
    L U U L L U D U D L
    L S U U S D L D U U
    D D D D U D S D U S
    U S U D S U L S D L
    D R R R L L L S L S
    L R S U S R D D R L
    6
    1
    0
    2
    3
    3
    0
    0
    2
    0
    7
    7
    0
    7
    4
    7
    8
    2
    2
    0

说明/提示

评分方式

设 TT(T≤2N2T \leq 2N^2)为输出的操作序列长度,RR 为未被打蜡的格子数。你的得分计算如下:

  • 若 R=0R = 0,得分为 3N2−T3N^2 - T。
  • 若 R>0R > 0,得分为 N2−RN^2 - R。

共有 150150 个测试点,提交的得分为所有测试点得分之和。如果输出非法或某些测试点超时,整份提交判为 WA 或 TLE,得分为零。比赛期间最高得分计入最终排名,赛后不再有系统测试。若多名选手得分相同,则排名并列,与提交时间无关。

输入生成方式

设 rand(L,U)\mathrm{rand}(L, U) 为生成 LL 到 UU 间均匀随机整数的函数。

MM 个机器人的初始位置从 N2N^2 个格子中均匀随机选取 MM 个不同坐标。

墙的生成方法如下,重复 5 次:

  1. 随机选择墙的方向:上、下、左、右。
  2. 确定墙的长度 L=rand(10,20)L = \mathrm{rand}(10, 20)。
  3. 对于竖直墙,起点 (i,j)(i, j) 由 i=rand(5,N−5), j=rand(4,N−6)i = \mathrm{rand}(5, N-5),\ j = \mathrm{rand}(4, N-6) 决定。
    若选中的 jj 与之前生成的竖直墙的 jj 距离的绝对值不超过 4,则重新选择方向。
    向上墙,将 vi−L+1,j,⋯ ,vi,jv_{i-L+1, j}, \cdots, v_{i, j} 设为 1;向下墙,将 vi,j,⋯ ,vi+L−1,jv_{i, j}, \cdots, v_{i+L-1, j} 设为 1。越界部分忽略。
  4. 对于水平墙,起点 (i,j)(i, j) 由 i=rand(4,N−6), j=rand(5,N−5)i = \mathrm{rand}(4, N-6),\ j = \mathrm{rand}(5, N-5) 决定。
    若选中的 ii 与之前生成的水平墙的 ii 距离的绝对值不超过 4,则重新选择方向。
    向左墙,将 hi,j−L+1,⋯ ,hi,jh_{i, j-L+1}, \cdots, h_{i, j} 设为 1;向右墙,将 hi,j,⋯ ,hi,j+L−1h_{i, j}, \cdots, h_{i, j+L-1} 设为 1。越界部分忽略。
  5. 生成墙后,检查所有格子是否仍然两两可达。若不可达,撤销本次墙并重新进行 5 次生成。

工具(输入生成器与可视化工具)

请注意,比赛期间禁止分享可视化结果或讨论解题思路。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页