AtCoder Regular Contest 019
C
最後の森
AtCoder
⌀ 2881
原题
← BD →
翻译中…

長い冒険もようやく終盤を迎え、あとは魔王の城に突入するのみとなった。

翻译中…

魔王の城は「最後の森」と呼ばれる場所にある。最後の森は縦 $R$ 行、横 $C$ 列のマス目で構成されており、それぞれのマスは以下のいずれかである。

翻译中…
  • 平地……平地のマスは自由に通行できる。
  • 木……木のあるマスは通行できない。
  • 強敵のいるマス……凶暴な強敵のいるマスである。後述の条件を満たさなければ通行できない。
  • プレイヤーの村……プレイヤーの初期位置である。このマスは自由に通行できる。
  • ほこら……伝説の剣 Link-Cut Sword があるほこらである。このマスは自由に通行できる。
  • 魔王の城……魔王の城があるマスである。このマスは自由に通行できる。
翻译中…

村のあるマス、ほこらのあるマス、魔王の城があるマスはちょうど $1$ つずつである。

翻译中…

以下、$i$ 行 $j$ 列 $(1 ≦ i ≦ R,1 ≦ j ≦ C)$にあるマスのことをマス $(i,j)$ と呼ぶことにする。$2$ つの異なるマス $(i,j),(k,l)$ ($i$ と $k$ は$1 ≦ i,k ≦ R$ を、$j$ と $l$ は $1 ≦ j,l ≦ C$ を満たし、$(i,j) ≠ (k,l)$ であるとする) が辺を共有しているとき、つまり以下の条件をみたす場合に隣接していると定義する。

翻译中…
  • $i = k$ かつ $j$ と $l$ との差の絶対値が $1$ である。
  • $j = l$ かつ $i$ と $k$ との差の絶対値が $1$ である。
翻译中…

プレイヤーは最初村のあるマスにいる。プレイヤーは以下の動作を行うことができる。

翻译中…
  • プレイヤーのいるマスと隣接しているマスに移動する。このとき移動先のマスが自由に通行できるマスでなければならない。
  • プレイヤーのいるマスと隣接しているマスにいる強敵と戦闘を行う。戦闘を行った強敵は取り除かれ、以降そのマスは自由に通行可能になる。
翻译中…

魔王との戦いでは高難易度のプログラミングスキルが要求されることだろう。魔王に対向するためには手持ちの装備(ライブラリ)を強化させなければならない。特に、ほこらにある伝説の剣を入手しなければ魔王に勝つことが出来ないだろう。そのためほこらに寄って伝説の剣を入手してから魔王の城に行きたい。伝説の剣を入手していない状態で魔王の城のあるマスを通行することは許される。

翻译中…

また、最後の森に生息する強敵との戦いは大変なので、伝説の剣を入手する前後合わせて $K$ 回以内の戦闘に抑えたい。

翻译中…

最後の森には魔王が発する猛毒の霧が立ち込めているため、出来る限り移動にかかる時間を短くしなければならない。最後まで手強いゲームだ。そこでプログラムを用いて、上記の条件を満たす移動経路として考えられるものの中で、移動回数が最小となるものの移動回数が知る必要が出てきた。

翻译中…

R C K
s_{(1,1)} s_{(1,2)}  … s_{(1,C)}
s_{(2,1)} s_{(2,2)}  … s_{(2,C)}
:
s_{(R,1)} s_{(R,2)}  … s_{(R,C)}

翻译中…
  1. $1$ 行目には、$3$ つの整数 $R,C,K$($R$ と $C$ は $1 ≦ R,C ≦ 50$ を、$K$ は $0 ≦ K ≦ 100$ をみたす) が空白を区切りとして与えられる。
  2. $2$ 行目から $R$ 回、長さ $C$ の文字列が $1$ 行ずつ与えられる。各文字は .,T,E,S,C,G のいずれかであり,$i$ 回目 $(1 ≦ i ≦ R)$ に与えられられる文字列のうち $j$ 文字目 $(1 ≦ j ≦ C)$ について、 をあらわす。村のあるマス、ほこらのあるマス、魔王の城があるマスはちょうど $1$ つずつである。
  • その文字が . なら、マス $(i,j)$ が平地のマスであること
    • その文字が T なら、マス $(i,j)$ が木があるマスであること
    • その文字が E なら、マス $(i,j)$ が強敵のいるマスであること
    • その文字が S なら、マス $(i,j)$ が村のあるマスであること
    • その文字が C なら、マス $(i,j)$ がほこらのあるマスであること
    • その文字が G なら、マス $(i,j)$ が魔王の城があるマスであること
翻译中…

移動回数の最小値を出力するプログラムを作成せよ。条件を満たす移動経路が存在しない場合は -1 を出力せよ。

翻译中…

なお、出力の最後には改行を入れること。

翻译中…

5 7 3
GET..ET
..T....
.TEST..
.E.T.ET
...ETC.

翻译中…

19

翻译中…
  • プレイヤーは最初にマス $(3,4)$ にいる。例えば、以下のように移動する。
翻译中…

5 7 2
GET..ET
..T....
.TEST..
.E.T.ET
...ETC.

翻译中…

21

翻译中…
  • 入力例 $1$ のときと比べて戦闘可能な回数が少ないため、少し遠回りする必要がある。
翻译中…

5 7 1
GET..ET
..T....
.TEST..
.E.T.ET
...ETC.

翻译中…

-1

翻译中…
  • 入力例 $3$ において、条件を満たす経路は存在しない。
翻译中…

6 35 4
T...TT.....TT...TTT...TTT..TTG.....
..T..T.TTT.T..T..E..T..E...TTT.TTT.
.TTT.T.....E.TTTTT.TTT.TTT.TTT.....
.....T.TT.TT.TTTTT.TTT.TTT.TTTTTTT.
.TTT.T.TT..T..T..S..T..TTT.TTTTTTT.
.CTT.E.TTT.TT...TTT...TT.....E.....

翻译中…

94

翻译中…
题目信息
题号
arc019_3
时间限制
2 s
内存限制
256 MB

题面与样例版权归 AtCoder 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。