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 はそう言ってます.
ですが,この簡単であるはずの問題も,僕はまともに解けませんでした.
しかし,解いてみた感想としては,このレベルの,あるいは,もう少し上の問題に対してなら訓練で対処できるかもしれない, ということです.
年々,頭も悪くなっています,集中力もなくなっています,でも,そのまま何もしなければ,そのままなのです. 意識高く頭を使っていきたいと思います.
がんばる.
このくらいの問題ならさっと解いてしまう,若者の存在が怖いよぅ.