ABC #36 の C について

今,僕が所属している会社では,「インフラエンジニアたちが Ruby を勉強する会」が毎週開催されています.

今回から,ABC(http://atcoder.jp/,この中で,beginner 向けのもの) を説いてきて,それらをレビューしてもらおう,という活動が始まりました.

今回は, ABC #36 がお題に挙げられていて,その中の,「座圧」の話をします.

この問題に,僕はドハマリして,2 ~ 3 時間ぐらいかかりました.

問題文としては,下記の URL のようになります.

ref : http://abc036.contest.atcoder.jp/tasks/abc036_c

まず,ハマった,難しかったポイントの一つ目です.

問題文の意味がわかりませんでした,日本語なのに. マジで.

なので,問題文が何を意味しているのかを把握する必要がありました. 不親切なことに(問題,なので当たり前ですが),入出力例は一例しか与えられていません.

まず,この例が,問題文の条件をみたすことを確認しました.

そして,次に,同様の条件を満たすように適当な,値の列を幾つか作り,共通点を探しました.

この作業を繰り返すうち,どのような条件を満たす値の列を作成すればよいかが,把握でき,コードに落としこむことができました.

次に,この問題には,入力から出力までにかかる時間に制限が設けられていました.

これが,満たせませんでした.. .. 結局,配列の走査にかかる時間が問題でした.

配列の走査をする箇所を最小にし,利用できる箇所は Hash を利用することで,制限時間をクリアできました.


以上が,問題を解くまでの流れです.

この問題は,簡単 です.少なくとも,AtCoder はそう言ってます.

ですが,この簡単であるはずの問題も,僕はまともに解けませんでした.

しかし,解いてみた感想としては,このレベルの,あるいは,もう少し上の問題に対してなら訓練で対処できるかもしれない, ということです.

年々,頭も悪くなっています,集中力もなくなっています,でも,そのまま何もしなければ,そのままなのです. 意識高く頭を使っていきたいと思います.

がんばる.

このくらいの問題ならさっと解いてしまう,若者の存在が怖いよぅ.