結果

問題 No.3802 Crossword Key
ユーザー Nihonielse
提出日時 2026-10-06 12:00:34
言語 Python3
(3.15.2 + numpy 2.5.4 + scipy 1.18.1 + ACL)
コンパイル:
python3 -mpy_compile _filename_
実行:
python3 _filename_
結果
AC  
実行時間 19 ms / 2,000 ms
+ 835µs
コード長 1,034 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 57 ms
コンパイル使用メモリ 14,848 KB
実行使用メモリ 10,496 KB
最終ジャッジ日時 2026-11-14 14:30:16
合計ジャッジ時間 2,889 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge5_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 41
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import sys


def main():
  input = sys.stdin.read
  data = input().split()
  if not data:
    return

  H = int(data[0])
  W = int(data[1])
  S = data[2:]

  keys = []

  # 上から順、左から順に走査する
  for r in range(H):
    for c in range(W):
      # 黒マスの場合はカギになり得ない
      if S[r][c] == '#':
        continue

      # 横のカギの条件判定
      is_horizontal = False
      if c == 0 or S[r][c - 1] == '#':
        if c + 1 < W and S[r][c + 1] == '.':
          is_horizontal = True

      # 縦のカギの条件判定
      is_vertical = False
      if r == 0 or S[r - 1][c] == '#':
        if r + 1 < H and S[r + 1][c] == '.':
          is_vertical = True

      # どちらか一方、または両方を満たしていればカギとする
      if is_horizontal or is_vertical:
        # 1-indexed (1始まり) で記録
        keys.append((r + 1, c + 1))

  # 結果の出力
  print(len(keys))
  for r, c in keys:
    print(f"{r} {c}")


if __name__ == '__main__':
  main()
0