AtCoder Beginner Contest 436に参加しました。
結果
A, B, Cの3問正解でした。
D問題を一応提出してみてTLEになったから、どうにかしようとしてたけどうまくできなかった。
https://atcoder.jp/contests/abc436/tasks/abc437_a
整数Nと長さがN未満の文字列が与えられる。 文字列の前をoで埋めた長さNの文字列を出力する問題。
長さがNになるまで文字列にoを追加し続けてから文字列を出力すれば良い。
指示されたとおりに処理すれば良い問題。
文字列の操作方法がわかれば解ける問題かな。
https://atcoder.jp/contests/abc436/tasks/abc437_b
N行N列のマス目に指示された通りの順に番号を振っていく問題。
指示されたとおりに処理すれば解ける問題。
mod演算ができれば解ける問題だと思う。 引き算した数に対してmod Nを計算する時は念のためNを足した数に対してmod Nするというのに気をつけるのがポイントかなあ。
https://atcoder.jp/contests/abc436/tasks/abc437_c
N行N列のマス目があるので、2×2マスのブロックを指示された位置に置けるなら置いていき、 最終的に何個のブロックが置けたかを答える問題。
マス目のサイズはかなり大きいので全マスに対してブロックがあるかどうかのフラグを用意することはできない。 なのでブロックが置かれているマスを個別に管理しておき、ブロックを置きたい4マスすべてに既存のブロックが存在しないことを確認して、新規のブロックが置けるかどうかを判断していった。
既存のブロックが存在するマスはペアのsetで管理することにした。 新規にブロックを置きたい時、ブロックを置くことになる4マス分がsetにまだ登録されていないことを確認して新規のブロックを置けるかどうかを確認した。
配列以外の方法でマス目のフラグ管理・任意のマスの状態の高速な検索ができるデータ構造を使ってブロックの状況を管理する方法が実装できれば解ける問題だと思う。
https://atcoder.jp/contests/abc436/tasks/abc437_d
N行W列のマス目があり、空きマス・障害物マス・ワープマスの3種類のマスがある。
空きマス・ワープマスを使って(1, 1)から(H, W)に移動できるかどうか、移動できる場合は最少で何回行動すれば移動できるかを答える問題。
よく見かけるDFS, BFSの問題にワープマスというアレンジが加わった問題。 ワープマスはアルファベットa~zの26種類あって、同じ文字のマスのいずれかに移動できる。
ワープも考慮したDFSを作ってみたけどTLEになってだめだった。
どうすれば処理を高速化できるかなと考えてみたけど修正が間に合わなかった。
順位表を見てみると正解者数が参加者の半分くらいになっているからそんなに難しい問題ではなさそうなんだけどなあ…