AT_abc387_d.[ABC387D] Snaky Walk

普及/提高-

通过率:0%

AC君温馨提醒

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

题目描述

有一个 HH 行 WW 列的网格。从上往下第 ii 行、从左往右第 jj 列的单元格记为 (i,j)(i,j)。

每个单元格是起点、终点、空单元格或障碍物,这些信息由 HH 个长度为 WW 的字符串 S1,S2,…,SHS_1,S_2,\dots,S_H 表示。具体来说,当 SiS_i 的第 jj 个字符是 S 时,单元格 (i,j)(i,j) 是起点;是 G 时是终点;是 . 时是空单元格;是 # 时是障碍物。保证起点和终点各恰好存在一个。

你现在位于起点。你的目标是通过重复移动到当前单元格边相邻的单元格,最终到达终点。但有以下限制:不能移动到障碍物或网格外,且必须交替进行纵向移动和横向移动(首次移动方向可任选)。

请判断能否到达终点,若可能则求出移动次数的最小值。

更形式化地说,请判断是否存在满足以下所有条件的单元格序列 (i1,j1),(i2,j2),…,(ik,jk)(i_1,j_1),(i_2,j_2),\dots,(i_k,j_k),若存在则求 k−1k-1 的最小值:

  • 对所有 1≤l≤k1 \leq l \leq k,满足 1≤il≤H1 \leq i_l \leq H 且 1≤jl≤W1 \leq j_l \leq W,且 (il,jl)(i_l,j_l) 不是障碍物
  • (i1,j1)(i_1,j_1) 是起点
  • (ik,jk)(i_k,j_k) 是终点
  • 对所有 1≤l≤k−11 \leq l \leq k-1,满足 ∣il−il+1∣+∣jl−jl+1∣=1|i_l - i_{l+1}| + |j_l - j_{l+1}| = 1
  • 对所有 1≤l≤k−21 \leq l \leq k-2,若 il≠il+1i_l \neq i_{l+1},则 il+1=il+2i_{l+1} = i_{l+2}
  • 对所有 1≤l≤k−21 \leq l \leq k-2,若 jl≠jl+1j_l \neq j_{l+1},则 jl+1=jl+2j_{l+1} = j_{l+2}

输入格式

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

HH WW
S1S_1
S2S_2
⋮\vdots
SHS_H

输出格式

若可以到达终点,输出移动次数的最小值;否则输出 -1。

输入输出样例

  • 输入#1

    3 5
    .S#.G
    .....
    .#...

    输出#1

    7
  • 输入#2

    3 5
    ..#.G
    .....
    S#...

    输出#2

    -1
  • 输入#3

    8 63
    ...............................................................
    ..S...#............................#####..#####..#####..####G..
    ..#...#................................#..#...#......#..#......
    ..#####..####...####..####..#..#...#####..#...#..#####..#####..
    ..#...#..#..#...#..#..#..#..#..#...#......#...#..#..........#..
    ..#...#..#####..####..####..####...#####..#####..#####..#####..
    ................#.....#........#...............................
    ................#.....#........#...............................

    输出#3

    148

说明/提示

约束条件

  • 1≤H,W≤10001 \leq H, W \leq 1000
  • H,WH, W 是整数
  • SiS_i 是由 S、G、.、# 组成的长度为 WW 的字符串
  • 起点和终点各恰好存在一个

样例解释 1


按照左图的路径 (1,2)→(2,2)→(2,3)→(3,3)→(3,4)→(2,4)→(2,5)→(1,5)(1,2) \rightarrow (2,2) \rightarrow (2,3) \rightarrow (3,3) \rightarrow (3,4) \rightarrow (2,4) \rightarrow (2,5) \rightarrow (1,5),可以通过 7 次移动到达终点。无法用 6 次或更少移动到达终点,因此答案是 7。注意右图所示的连续横向移动(或连续纵向移动)路径是不被允许的。

样例解释 2

无法到达终点。

翻译由 DeepSeek R1 完成

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

首页