AtCoder 黄色になりました

AtCoderで黄色になりました.

これがレーティンググラフです.ご覧のとおり,青になってから実に2年もの間青〜水の停滞をしていました.しかしここ半年ぐらいで一気にレートが上がるようになり,黄色に上がることができました.

黄色にということにはそれなりに意味があると思うので,特に青になってからどのように取り組んできたのか(どのように取り組むと良いのか)について記述してみたいと思います.

コンテストへの参加

AGC,ARCへの参加をやめました.理由は簡単で,自分にはハードルが高かったからです. 特に最近のAGCは1問目からとても難しく,ARCも自分にはなかなか厳しいセットが多いです.半年ぐらい前から,出場するコンテストをABCに絞り,ABCのパフォーマンスを最大化することに集中するようにしました.結果的にはこれで良かったと思います.

精進

基本的には ABCの過去問 + 「典型90」で練習しました. よく言う問題を「埋める」というのは単に AC をすることを指すと思いますが,単に「埋める」だけではなく問題をマスターするまで繰り返すように意識しました.

特にABCのような典型問題には「解ける」と「早く解ける」のステップがあり,

  • 青diff までは「早く解ける」に行く必要がある.
  • 黄diff は「解ける」に行く

を目標にしました.

その上で,自分は典型90と直近20〜40セットぐらいを何周もしました.

今や ABC は過去問のストックが膨大になってきたので,費やせる時間が同じなら「たくさんの問題を薄く理解する」になってしまいがちですが,「きちんと理解する」の基準をぶらさずにその基準に達した問題を1つ1つ積み上げるようにしたほうが結果的に利得が大きいと思います.(ABCの過去問に対してこの姿勢が取れるのには典型90の貢献が非常に大きいです.典型90のおかげで知識の網羅度がかなり保証されるようになったため,ABCを「手広く」やる必要性がだいぶ低くなったと思う)

意識したこと

以前旧 admin の rng_58 さんに次のようなアドバイスをもらったことがありました:見切り発車で実装しては行けない.頭の中でコードが完全に出来上がるまで書き始めるな

これを練習の時に意識して取り組むようになってからだいぶ実装速度が上がり,結果的に安定するようになったと思います.具体的には,典型90の問題などを題材にして(1度以上通したことがあっても),紙の上で実装手順を全部書き出すなどして完全に理解した状態でコードに起こすことを繰り返しました.

そのほか

難しい問題の解説をどう理解するか?

人によって色々だと思います.自分は印刷したものにペンを持って齧り付いてなんとか理解しようとしました.実は自分は他人のコードをほとんど読むことをしなかったです.と言うのも,読んでも他人のコードをほとんど理解できないからです.強くなればわかるようになるのかな...?

snuke さんの解説は時々見て一緒に実装することで強い人の書き方をトレースしようとしたりはしました.そんなにたくさんやったわけじゃないけどいくつかの書き方はそれで身についた実感もあるので,やって損はないと思います.


そういうわけで,累積の精進にどこまで意味があるか(あんまり昔に背伸びして変に難しい問題を解説読んで通したのに意味があったか?)は微妙なんですが,一応最後に difficulty pie を貼っておきます.

今後

ARC,AGCへの出場も復活します. 橙いけるかなぁ