AtCoderで青色になるまで

2020/11/08のABC182で青色コーダーになれました.

本番で青diffを一度も通してないのに,青色コーダーを名乗っていいかは怪しいところですが,名前が青色になったことは間違いないので,色変記事を書こうと思います.

f:id:MinatoYoika:20201109200018p:plain

f:id:MinatoYoika:20201109200217p:plain

f:id:MinatoYoika:20201109200245p:plain

f:id:MinatoYoika:20201109200323p:plain

 

  • はじめに
  • 水色以降に学んだアルゴリズムとデータ構造
  • 精進方法
  • バーチャルコンテストについて
  • おわりに

 

はじめに

本記事は,青色を目指す過程で筆者が行った精進方法を記載していますが,精進方法の適正にはかなりの個人差があります.記事の内容はあくまで参考程度とし,ご自身に合った精進方法をお探しください.

水色以降に学んだアルゴリズムとデータ構造

  • bit DP
  • 区間DP
  • 桁DP
  • ダブリング
  • クラスカル
  • ディニッツ(フロー)
  • 座標圧縮
  • 半分全列挙
  • 二部グラフ判定
  • 01BFS
  • セグメント木
  • 遅延セグメント木

入水してから青になるまでに学んだものは,だいたいこんな感じです.

この中でも,コンテスト前に学習し,実際にコンテストで使用したのはbit DPと桁DPくらいです.これは個人的な意見ですが,水色から青色になるのに必要なのは,新しいアルゴリズムの知識というよりは,以下のような基本的なアルゴリズムとデータ構造しっかりと理解し,応用できることだと思います.

  • 全探索
  • 深さ優先探索
  • 幅優先探索
  • 二分探索
  • 累積和
  • 順列
  • 組み合わせを用いた数え上げ
  • 逆元
  • 基本的なDP(ナップサック,LIS等)
  • グラフの基礎
  • ダイクストラ
  • ワーシャルフロイド法
  • unionfind
  • BIT

水~青diffの一部の問題では,これらを組み合わせたり,問題特有の制約を利用して応用することが求められます.下手に難しいアルゴリズムに手を出すよりも,これらをきちんとマスターする方が,レーティングを上げられる気がします.(上げられるとは言ってない)

 

精進方法

その時々の目標によって精進方法を変更したため,時系列に沿って説明します.

3月

今年の3月に入水しましたが,当時は水diffどころか緑・茶diffすら満足に解けるか怪しい実力しかなく,すぐに緑に落ちてしまいました.そこで,まずは緑・茶diffをしっかり通せるように,先述した基本的なアルゴリズムとデータ構造に焦点を当てて勉強しました.具体的には,蟻本に載っている問題や,こちらの記事の演習問題を中心に問題を解きました.

qiita.com

このとき,5分考えて方針が全く思い浮かばなかったときは,すぐに解説を見ていました.解説を見るタイミングについては,「解説を見ずに長時間考察した方が力がつく」といった言説をよく耳にします.否定するつもりはありませんし,考察した方が力がつくのはその通りだと思います.しかし,水色コーダーになりたての時点では,問題の解に近づくための最低限の考察力すらついていなかった(少なくとも自分は自分の実力をそう見ていました)ので,考察力を鍛えるためではなく,学習したアルゴリズムの活用訓練と典型的な考察手法の会得のためだと割り切って問題を解いていました.

4月

4月からは,上記の復習と並行して,AtCoder Problems上で開催されていたバーチャルコンテスト(あさかつ 7:30~/よるかつ 21:00~/後にくじかつ 21:00~)に毎日参加しました.目的は緑diff以下を早く通せるようになると,水diff問題に慣れるためです.結果は大体4完~5完程度で,全完することはほとんどありませんでした.

5月~6月

この頃から,バーチャルコンテストで水diffを安定して解けるようになり,問題によっては青diffにも手が付けられるようになりました.

7月

 院試勉強に集中するため,7月は朝晩のバーチャルコンテストをお休みしました.また,3か月に及ぶ朝晩のバーチャルコンテストにより,水diff以下の問題はおおよそ解けるようになったので,青diffを毎日1ACして高難易度に対する苦手意識を払拭する精進に切り替えました.

8月

ようやく考察力を身に着ける気になり,青diff埋めを開始しました.以前のように5分で諦めたりはしませんでしたが,30以内考えて解けなかったら解説を見ていました.

9月

本格的に青diffを埋め始めたことにより,バーチャルコンテストのほとんどの問題を一度は見ているという状態(水diff以下に至っては3~4回解いている状態)になりました.その結果,問題を解く過程が「解法を考えるのではなく,記憶から引き出す作業」になってしまったため,AtCoderのバーチャルコンテストではなく,Codeforcesのバーチャルコンテスト(Morningforces 7:30~ / こどふぉバチャ 20:00~,現在は21:00~)に参加するようになりました.

10月~11月(現在)

大学の方が忙しくなったため,朝晩のバーチャルコンテストのみで精進をしています.

バーチャルコンテストについて

本番形式で問題を解くことができるバーチャルコンテストは,精進方法として極めて有効だと考えています.時間的な緊張感を持って問題に取り組める上,競争相手がいることでモチベーションを維持しやすいからです.ここでは,筆者が参加したバーチャルコンテストの内,現在開催されているものを紹介させていただきます.

  • あさかつ
    AtCoder Problems上で毎朝7:30~開催されています.タキガワさん主催です.問題を解くことで,気持ちのいい朝を迎えたい方におすすめです.
  • くじかつ
    AtCoder Problems上で毎晩21:00~開催されています.TERRYさん主催です.青diffまでのNORMALと,橙diffまでのANOTHERの,2種類の難易度が用意されています.自分も黄diffに手が出せるようになったら,ANOTHERの方に参加しようと考えています.

    www.terry-u16.net

  • こどふぉバチャ
    Codeforces上で毎晩21:00~開催されています.えすえふさん主催です.Codeforcesのバーチャルコンテストは,予めフレンド登録しておかないと一緒に参加している人の名前が分からないので,参加前にえすえふさんのツイートから,参加者のIDを調べてフレンド登録することをおすすめします.ntkさんの記事に参加方法が書かれているので詳しくはそちらをご覧ください.

    ntk-ta01.hatenablog.com

  • Morningforces(宣伝)

    Codeforces上で毎朝7:30~開催されています.筆者が主催しています.Twitterで#Morningforcesと検索すると,こんな感じのツイートが出てくるので,リンク先のバーチャルコンテストをregisterしていただけると参加できます.

    f:id:MinatoYoika:20201112204739p:plain

おわりに

卒業論文を書き終えるまでは,バーチャルコンテストのみの精進で,ゆったり黄色を目指していく予定です.その後は,Web開発の方にも手を出したいと考えています.

自分は他人の色変記事を読むのが大好きなので,競プロコミュニティで色変記事を書く文化がもっと活発になればいいなと思っています.今回,自分で記事を書いたのもそれが理由です.この記事を読んだ皆さんが色変した暁には,是非一筆とっていただきたいと思います.