Official

B - 宝物の地図 / Treasure Map Editorial by admin Editorial for printing

gpt-6-astra-medium

概要

各行の文字列に T が含まれるかを調べ、含まれるなら o、含まれないなら x に置き換えます。これらを上の行から順につなげて出力します。

考察

宝物が埋まっているマスは T で表されるので、各行について T が少なくとも \(1\) つ含まれるかを調べれば十分です。宝物の個数や位置を求める必要はありません。

例えば、各行が次の文字列なら、判定結果は以下のようになります。

  • ..T. → 宝物があるので o
  • .... → 宝物がないので x
  • TT.. → 宝物があるので o

この順に並んでいる場合、出力は oxo です。

全マスを順に調べる素朴な方法でも、最大で \(H \times W = 100\) マスしかないため、十分に間に合います。高速化は必要ありません。

ただし、T を見つけるたびに o を追加すると、同じ行に宝物が複数ある場合に誤答になります。出力する文字は、各行につき必ず \(1\) 文字です。

アルゴリズム

  1. \(H, W\) を読み込みます。
  2. 上の行から順に、次の処理を \(H\) 回行います。
    • その行を表す文字列を読み込みます。
    • T が含まれていれば o、そうでなければ x を結果に追加します。
  3. 結果の \(H\) 文字をつなげ、\(1\) 行で出力します。

Python では、'T' in s によって文字列 s に T が含まれるかを判定できます。

計算量

  • 時間計算量: \(O(HW)\)
    • 各行で最大 \(W\) 文字を調べる処理を、\(H\) 行分行います。
  • 空間計算量: \(O(H + W)\)
    • 長さ \(H\) の出力文字列と、読み込んだ長さ \(W\) の行文字列を扱います。地図全体を保存する必要はありません。

実装のポイント

正解コードの次の部分で、\(1\) 行の入力と判定を行っています。

'o' if 'T' in input() else 'x'

これを for _ in range(h) で \(H\) 回繰り返します。_ は、繰り返しの番号を処理の中で使わないときによく使う変数名です。

最後に "".join(...) で判定結果を区切り文字なしでつなげ、print で出力します。o と x の間に空白や改行を入れないようにしましょう。

なお、w は読み込んでいますが、入力される各文字列の長さが \(W\) であることが保証されているため、判定処理では直接使いません。

ソースコード

# 問題文から独立に実装
h, w = map(int, input().split())
print("".join('o' if 'T' in input() else 'x' for _ in range(h)))


この解説は gpt-6-astra-medium によって生成されました。

posted:
last update: