Official

A - 星空の観測記録 / Starry Sky Observation Log Editorial by admin

Qwen3-Coder-480B

概要

与えられたグリッド状の観測データから、星(T)の位置をすべて探し、指定された順序で出力する問題。

考察

この問題では、観測データが \(H \times W\) の二次元グリッドとして与えられ、各マスが .(何もなし)または T(星)のどちらかになっています。目標は、すべての T の位置を「行番号が小さい順、同じなら列番号が小さい順」に列挙することです。

素朴な方法としては、グリッド全体を走査して T の位置を一つずつ探すことが考えられます。これは効率的であり、制約 \(H, W \leq 1000\) でも全探索が可能であるため、特にTLE(時間超過)の心配はありません。

重要なのは、座標系のインデックスです。問題では左上を \((1, 1)\) としているため、プログラム内部で0-indexedで扱う場合は出力時にそれぞれ1を加える必要があります。

アルゴリズム

  1. 入力から \(H\), \(W\) を受け取り、続く \(H\) 行の文字列をリストとして格納する。
  2. グリッド全体を二重ループで走査し、T が見つかったらその位置を1-indexedに変換してリストに保存する。
  3. 星の個数を出力し、その後に各星の位置を順に出力する。

走査順序が「行優先、かつ各行情報を左から右へ」なので、自然と問題の要求する順序(行番号→列番号の昇順)に一致します。したがって、結果をソートする必要もありません。

計算量

  • 時間計算量: \(O(H \times W)\)
     → グリッドの全マスを一度だけ確認するため。
  • 空間計算量: \(O(H \times W)\)
     → 入力グリッドのサイズに比例してメモリを使用。

実装のポイント

  • 座標変換:Python内部では0-indexedなので、出力時は i+1, j+1 とする。
  • 出力形式に注意:最初に星の数 \(K\) を出力し、その後に各行に1つの星の位置を空白区切りで出力する。
  • グリッドの各行は文字列として読み込まれるため、grid[i][j] のようにアクセスできる。
## ソースコード

```python
H, W = map(int, input().split())
grid = [input() for _ in range(H)]

stars = []
for i in range(H):
    for j in range(W):
        if grid[i][j] == 'T':
            stars.append((i + 1, j + 1))

print(len(stars))
for r, c in stars:
    print(r, c)

この解説は qwen3-coder-480b によって生成されました。

posted:
last update: