黄色になった記事

慣例に従って書くんですが、ちゃんと書くと面倒なのでめちゃくちゃ雑に書きます。

要約

2019/9/28(土)のABC142でAtCoder黄色になった。

どれくらい解いたか

何をしていたか

1850くらいまで

  • JOI埋めをやった。難易度埋めたのは6,7。AtCoderで400~600適正帯の難易度の問題が枯渇したらやるといいと思う。あと、DPとか状態をもってDijkstraするみたいな問題が豊富で、状態をうまくもつみたいな問題を鍛えたい人にはおススメ。
  • 3月くらいで黄パフォ3連とかが出て黄色はそんなに遠くないとか思っていた。

新ABC後

  • 新ABCが始まる。新ABCには苦戦してしまった方だと思う。基本的にFが青適正には厳しい問題が多く、Eまで早ければそれなりに稼げるが、ちょっとミスると挽回できず冷えるという回が多かった。まあ200人解いてるFが解けなかったりしたので力不足だったんですが...。
  • 最終的には新ABCで早解きがそこそこうまくいったので黄色になった。青帯にとってはABCはEまでを早く正確に解けないと話にならないことが多いので(Golfを除く)、つらい人にはつらい(つらかった)。

知識とか考察とか

  • ABCは上述のように黄色を目指すのであればEまでは基本的にスムーズに解けるべきで、Eで詰まったら要復習。Fは何が出るか全くわからないので、何が出てもいいように勉強する。凡人には類題みたことなかったら不可能だろ、と思うものあるので、そういうのが出たらちゃんと復習する。
  • 解けなかったらなぜ解けなかったのかを考える。
  • どの辺が典型なのかわからなかったら強い人にどの辺が典型なのか聞く。
  • こういう道筋で考察をしていれば解けたかなあと思うまで考える。全くそう思えないときは頭の悪さを嘆く。
  • 少なくとも過去問演習のときは解法の証明をする。
  • 考察のテクみたいなやつはいくつかある。強い人はこんなことを意識的にやっていないかもしれないけど、自分が困らないようにいくつか蓄えておくべきだと思う。
  • クエリ系はそもそもクエリが1つのときに非自明な場合があるのでそういうときはまずクエリが1つのときを解く(JSC2019本選C:C - Maximize Minimum)
  • 問題の場合よりもっと特殊な場合をまず解いてみる(AGC033-C: C - Removing Coins、一般の木の前にパスの場合を先に考えると予想が立ちやすい)(JAG夏合宿2019Day3-E:Aizu Online Judge、1色の場合を考える)
  • 困ったら後ろから見る(AGC037-C:C - Numbers on a Circle、他多数)
  • 困ったらリストは合った方がいいのかも。
  • だんだん無意識になっていったものもあると思う。無意識だけで解ける問題が増えることが強くなるための1つの大切なことだと思うが、どこまで訓練を積んでできるようになるのかは不明。

実装

  • バグったら悲しいので、自分にとってやりやすい書き方がないかを気が向いたときに考える。
  • 個人的な方針なので参考にならないかもしれないが、いくつか挙げてみる。「pairのネストは避ける」、「ラムダ式を積極的に使う(考えた順番で上からコードが書けるので気に入った)」、「同じような操作は関数化する」、「実装量が多く頭が壊れるなと思ったら変数名はわかりやすいものにする」etc.
  • 自分の実装力に不満がある場合は、強くてコードがわかりやすい人の実装を参考にする。どうしても競プロだと考察に重きが置かれがちだが、往々にして強い人のコードは整理されていて簡潔。実装は自分流の書き方を続けているだけでは変わらないという思想を持っているので、人のコードを見てブレイクスルーを起こすことが必要だと思っている。この人のコードはわかりやすいぞというのを抑えておくといいかもしれない。
  • 実装と考察(特に詰め切る力)は不可分。人の実装を見て、「まだ詰め方が甘かったのか」と思わされることは多かった。他人の実装を見て学ぶことは、考察力の向上にもだいぶ貢献すると思う。

学生が終わるまでに橙になれたら嬉しいね....。