CF2068I.Pinball

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

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

题目描述


你正在一个 h×wh \times w 的网格上玩弹珠游戏。

游戏开始时,小球位于标记为 S\texttt{S} 的单元格中心。每个单元格可能为以下类型之一:

  • 块状墙(#\texttt{\#}):阻止小球进入,并使其反弹
  • 薄斜墙:左斜(\texttt{\\})或右斜(/\texttt{/}),根据方向反射小球
  • 自由单元格(.\texttt{.}):可自由移动

目标是通过操作使小球逃离网格。

初始时,你可以选择四个方向之一推动小球:上(U\texttt{U})、下(D\texttt{D})、左(L\texttt{L})、右(R\texttt{R})。小球经过自由单元格需 1 秒,穿过含薄斜墙的单元格需 1 秒(进入和退出各占 0.5 秒),碰撞块状墙瞬间反弹(不耗时)。

小球与所有墙壁的碰撞均为完全弹性反射。例如:小球需 2 秒完成进入自由单元格→穿过→碰撞块状墙→原路返回→退出的过程。

你可在任意时刻破坏薄斜墙(永久转换为自由单元格),需确定是否存在解。若存在,求需破坏的最小斜墙数量及每个破坏操作的具体时间。

输入格式

第一行包含两个整数 hh 和 ww(1≤h,w≤10001 \le h, w \le 1000)——网格尺寸。

接下来 hh 行描述初始网格:

  • 第 ii 行包含 ww 个字符
  • .\texttt{.} 表示自由单元格
  • #\texttt{\#} 表示块状墙
  • \texttt{\\} 或 /\texttt{/} 表示薄斜墙
  • S\texttt{S} 表示初始位置(视为自由单元格)

保证网格中恰好有一个 S\texttt{S}。

输出格式

若可行,输出 YES\texttt{YES},否则输出 NO\texttt{NO}。

若可行,额外输出:

  1. 第二行:初始推动方向 d∈{U,D,L,R}d \in \{\texttt{U}, \texttt{D}, \texttt{L}, \texttt{R}\}
  2. 第三行:需破坏的最小斜墙数 kk
  3. 后续 kk 行:每行三个整数 ti,ri,cit_i, r_i, c_i,表示在启动后 tit_i 秒前(即精确到 tit_i 秒时该墙已消失)破坏第 rir_i 行(从上数起)第 cic_i 列(从左数起)的斜墙

要求:

  • 操作按时间升序排列(ti≤ti+1t_i \le t_{i+1})
  • 同一单元格不得重复破坏
  • 所有 ti∈[0,107]t_i \in [0, 10^7]

输入输出样例

  • 输入#1

    4 6
    #\###.
    #./S##
    #\\..#
    ######

    输出#1

    YES
    L
    2
    7 3 3
    8 1 2
  • 输入#2

    3 3
    ###
    .S.
    ###

    输出#2

    YES
    R
    0

说明/提示

第一个样例中,需破坏 2 面墙:

  • t=0t=0 时向左推动
  • t=7t=7 前破坏 (3,3) 的墙
  • t=8t=8 前破坏 (1,2) 的墙
  • t=10.5t=10.5 时逃离

第二个样例中,直接向左或右推动即可逃离。

翻译由 DeepSeek R1 完成

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

首页