概要

2025年5月3日(土)21時から開催されたAtCoderコンテストに参加しました。
結果は A・B問題の2完。ギリギリではありますが、茶色を維持しています。

AtCoderには nullpointerlog という名前で参加しています。
この記事では各問題の所感と反省点を振り返っておきます。


A・B問題:なんとか2完

A問題

少し時間がかかりましたが、英小文字に対応するサイズ26のテーブルを作り、入力文字を消しこんでいく方針で解きました。
解説にあるような2重ループの方が、よりシンプルに書けたかもしれません。

B問題:マトリックスの回転

2次元配列を90度ずつ最大4回まで回転させ、それぞれの状態とTを比較して違いの数を求め、最小の操作回数を選ぶ問題。
ロジックはすぐに思いつきましたが、90度・270度回転時のインデックス変換のコーディングと確認に少し時間がかかりました。
こういった典型実装こそ、丁寧さが問われると実感しました。


C問題:グラフ問題の落とし穴

問題文の要点は:

  • 各頂点が ちょうど2本の辺 を持ち
  • それらが 1つのループ(一筆書き)として閉じているか

私は 「各点の次数が2なら、全体がループになっているはず」 と早合点して判定した結果、WA(Wrong Answer)が4回。

結果的には、

各点が2本ずつの辺を持っていても、**複数の閉路(ループ)**ができてしまえば「一筆書きで一周」にはならない。

ということに、最後まで気が付きませんでした。

作問者の罠に見事に引っかかりました。


✅ 正解パターン(1つのループ)

graph LR A1((1)) --- A2((2)) A2 --- A3((3)) A3 --- A4((4)) A4 --- A5((5)) A5 --- A6((6)) A6 --- A1

❌ 失敗パターン(2つの独立したループ)

graph LR A1((1)) --- A2((2)) A2 --- A3((3)) A3 --- A1
graph LR A4((4)) --- A5((5)) A5 --- A6((6)) A6 --- A4

D問題:整理はできたが実装に至らず

C問題でWAが続き、手が止まったためD問題にも目を通しました。

問題を読むと、

  • 各動物園に 0回・1回・2回訪問する全パターンを探索する問題。

という構造だと理解できました。
ただ、訪問パターン数や条件判定の複雑さ、インデックス管理の難しさから、バグなく25分以内に実装しきる自信が持てず、今回は見送りました。

後日、落ち着いて解き直しましたが、やはり 動物園(N)と動物(M)のインデックス混同によるバグ が多発。
実装力の課題が浮き彫りになりました。


学びと今後

今回の反省点・学び:

  • 「すべての点の次数が2である」という条件だけでは判定として不十分であり、それだけで良いなら簡単すぎるのでは?という視点も必要(C問題)
  • 幅優先探索(BFS)などを用いて1つのループをたどり、全ての点に到達できるかなど、別解をすぐに試せるコーディング力が必要(C問題)
  • 問題文からデータ構造(NとM)を明確に理解し、整理してからコーディングに入るべき(D問題)

次回のABCでは、C問題以上の突破を目標に、グラフ構造の理解と実装力の強化をして臨みます。


AtCoderステータス

  • アカウント名:nullpointerlog
  • 現在のレート:茶色 (502 → 493 / -9)