291.1

250

正方形を上下に折り、最後に斜めに折った形のうち、穴の空いている場所が与えられる。開いたときどこに穴が空いているか答えよ、という問題。


対称形になるように図形を拡張していけば良い。JavaのStringBufferにはreverseメソッドがあるので、試してみたところ問題なく動作。今後は自前ルーチンじゃなくてそっちを使おう。

500

N個の部屋があり、最初にいる部屋のみ明かりがついている。各部屋にはいずれかの部屋に対応したスイッチがあり、明かりが付いている部屋にのみ、いることができるとする。目的の部屋のみ明かりがついている状態にし、目的の部屋に行くまでに、何度部屋を移動しなくてはならないか答えよ、という問題。すべての部屋は連結されている。


現在位置と明かりの状況でメモ付き探索するだけ。今いる部屋で明かりを消すだけ、というのを忘れないようにしないと、最後の部屋にうまく到達して終了しない。(多分、移動するのと消すのを独立に計算すればいいだけだったと思う。移動するのと消してから移動するのを一つのステップに書くと良くない。)

1000

単語の辞書が与えられるので、その中に出てくる語でしりとりをするとき、複数回同じものを使っても良いという状況で、文字長がN以上で辞書順で先頭のものを答えよ、という問題。


ループになる文字の頭に辞書順で最初のシーケンスを付けるとか色々やったけれど真面目に探索する必要がありそう。DPで解けるらしいが...。