AtCoder水色になるまでにやったこと

先日のAtCoder Beginner Contest 118で、晴れて水色になることができたので、例によって色が変動したときに執筆されるタイプの記事を書いてみることにします。

灰色のとき

正直なところあまり記憶がありません。初回はABC069、C++で2完(perf: 397)したようです。
真面目に参加しはじめたのは2018年4月ごろからでした。

初回はC++で参加していたようですが、それより後はDを主に使っています。

「蟻本を買いなさい」という天の声が青い鳥を通じて聞こえたので、この頃にバイブルを買いました。しかし、真面目に読まないで「うっわマジでこんな難しいことをやるの??人間こわすぎでしょ」とか思ってた記憶があります。

  • 基本的な文法
  • stdin/stdout の扱い方、入力文字列のparse
  • 配列の使い方

これらの知識を持っていました。今ではhttps://atcoder.jp/contests/APG4bを利用することで上3つよりも多くの基礎を身につけられるようになっているので、初心者の方はぜひ活用してほしいです。

茶色のとき

ABC096でD - Five, Five Everywhereを解いて茶色になりました。茶色の期間は一番短くて、3回のコンテスト分だけでした。灰色のときと、実力はさほど変わっていなかったように思います。

茶色になってから始めたことは、自分が解説できそうな問題はブログで記事にしてみることと、Twitterの界隈に入りこんでみるということでした。記事として一度まとめてみることで、将来似た問題に遭遇したときに対処できる可能性が上がります。また、界隈において強い人が書いた記事や知見、思考、あるいはクソなぞなぞを目にすることで、柔軟な思考ができるようになりました(ほんまか?)。

このとき、競プロにおいて必要な早解き力をつけることを意識していました。レーティングは順位が高ければ高いほど、良い値がつきます。そのため、一秒でも早くコードを書きサンプルをテストすることを頑張りました。

  • A, Bの早解き
  • 整数
  • DFS, BFS
  • set(redBlackTree)
  • map, filterとかそういう数学チックな関数(早解きするとき役立つ)

緑色のとき

沼。今までに参加したコンテストの10~37回、すなわち28回は緑色として出ていました。日付にして6/3〜2/15の期間です。これがとても長くて、心が折れそうになりました。0完太陽をhighestでキメて2ヶ月ぐらい停滞したりね(とてもつらかった)。

しかしながら、停滞による忍耐力はかなりついた気がします(Getting Over Itをプレイしているときと、停滞しているときの気持ちがとても似ていた)。

0完太陽をキメた頃に部長として競プロを布教していたら、ある一人の同校erが始めてくれたので、この人に追いつかれないようにしないと…!というモチベが新たに生まれていたりしました。また、水色への憧れも諦めきれなかったので、それも合わせて高3になる前には絶対なるぞ〜〜と意気があがっていました。やっぱりメンタルは大事だなあという学びを得ました。

整数問題を得意にしたくて、マスター・オブ・整数を購入して解いてみたり、強い人の生態を知りたくて競プロキャンプに参加しました。東工大のOCでも競プロerに会ってみたり。でもこの人たちが僕を抜かしていったので、けっこう精神的ダメージを受けました。あと簡単なミスで通せなかったときなどは、次の日がとても憂鬱だったりしました。しかし諦めたくなかったのでなんとか続けました。
やっているうちに、競プロは経験と知識を頼りにいろんなやり方を考えるのが大事だということがよくわかりました。

あと、色には関係ないですが情報オリンピックの予選に参加してみたのも印象深いです。残念ながら本選には行けませんでしたが、競プロをやっていたお陰でそこそこの点数を取ることができました。

  • 基本的にCまで解く。Dは解けたら解く
  • 再帰
  • 簡単なDP
  • 二分探索
  • エラトステネスのふるい
  • ワーシャルフロイド
  • writerの傾向をつかむ(コラ)
  • map, filter, each, reduce, all, any, groupなどを使いこなす(脳内で考える手続きを言語化するのに役立つ関数たちだと思います)
  • コンテスト中ぐらい自信をもって取り組むこと!
  • 楽しむこと!!

つらいことばっかり書いてしまったんですが、それ以外にもたくさん学ぶことがありました。「数学なんで学んでも将来使わないじゃん」と言う人はたまにいますが、実用例を知ることができた気がしますし、また理数科の課題研究では競プロで得た計算量などの知識を大いに生かして、発表会で優秀賞を受賞することもできました。体育が苦手な自分にとっては、今までの中で一番自分の成果につながった「競技」だといえます(卓球が一応できます)(←非本質情報です)。

まとめ

競プロは解けるときは楽しいし解けないときは楽しくない
だから解けるようになるために精進するのも大事だし、あまり追いすぎて疲れないように程々にやることも必要だと思いました。
もうすぐで高3なので一度休止して受験勉強を頑張ろうと思います。皆さんも程々に。楽しめる範囲で友達と競プロ、あの子と競プロ、部活で競プロをしましょう。

追記(2019/11/16): PCK2019本選に出場しました!!

パソコン甲子園2019本選参加記「AはDPのA」 - private_yusuke’s diary