【AtCoder】黄色になりました

ABC275 で AtCoder 黄色になりました。

ほとんどがポエムなので、物好きな方以外は最後の「おすすめコンテンツ」だけ読んでもらえれば十分だと思います。

解いた問題数
コンテストサイト 問題数
AtCoder 1566
Codeforces 309
AOJ 309
yukicoder 125
library-checker 8
合計 2317

「〇日後と決めて解き直す」みたいなことはしていませんが、後述する「コンテスト中に解けなかった問題を解いた」ときに同コンテストの他の問題を見直したり、関連する話題を漁っていて再会した問題をまた解いたり、ということは割としているので、実際にはもう少し多いと言えるかもしれません。

自己紹介
  • 地方国立大 B4
  • 情報系
  • 競プロを始めたのは B1 の秋
  • 中学受験・科学オリンピックは未経験

競プロは中学受験経験者や科オリ経験者が強い側面があると思っていますが、そういう経験はありません。

青上位~くらいになると、旧帝大(特に東大京東工大など)の学生や、有名中高一貫校の中高生が多い気がしているので、競プロ界隈では少数派かもしれません。

練習方法(青→黄)
コンテスト中に考えて解けなかった問題を解く

この練習方法で良い点は「問題を解くことで得られる知識が、次に身に付けるべきこととして適切である確率が高い点」で、悪い点は「ある分野の知識を網羅的に身に付けるのに不向きな点」だと思います。そのため、キーワードを使って関連する話題を調べたり、理解できるまで AC しないことは意識しています。なお、その結果解説を読んでも理解できずに途中で放置されている問題が結構あります。

なお、問題量については、バーチャルコンテストなどを活用すれば確保できると思います。(自分はそこまで手が回っていないですが。)

公式解説をオープンしても良いですが、Twitter で解けた人のツイートを読んで、断片的な情報から解法を考案するというのを自分はやっていました。

AtCoder Type Checker によると、自分は「わずかに、多く解くタイプ」らしく、実感としてもそのレート帯の人が解けるべき問題を全て解いたうえでもう 1 問解けたときにレーティングが上がることが多かったですが、この練習方法が効いたのではないかと勝手に思っています。

網羅的・体系的に学ぶ

競プロ典型 90 問や書籍など、自分が競プロを始めてからの期間だけでもさまざまな競プロコンテンツが出ていますが、だいたい途中で飽きてしまうこともあり、あまり進んでおりません。しかし今の自分の喫緊の課題は蟻本の内容(特にフロー)を理解することなのではないかと思います。

気長にやる

〇か月後までに〇〇色にならないとやばい、みたいなのはなかったので、気長にやりました。もちろん継続的な努力ができる人のほうが上達は早いと思いますが、プレッシャーに押しつぶされてやめてしまう人も結構見てきたので、少しずつ気長に続けるのもありなのかな、と感じます。

チーム練習

そもそも 2021 年秋から競プロを再開したのは ICPC の影響がありますし、定期的に長時間の練習を行う習慣がつくことや、自分が知らないことを知る機会が増えることは良いと思っています。

Codeforces の Gym に無限に問題があるのでこれを使うのがおすすめです。

学んだアルゴリズムなど

学んだが実際のコンテストでは使ったことはないアルゴリズムも結構あり、勝負問で学んだ内容が活かせるかははっきり言って運だと思っています。 そのため、学んだアルゴリズムなどについては明示的には書きません。

ただ、青になったばかりの頃に比べると、何ができるかだけ知っているアルゴリズムも含めれば数はかなり増えました。( 2 倍どころではないです。)また、既に知っていた内容に関しても、取り出すスピードが上がったり、より抽象的に理解できるようになったと感じます。

黄色について

青くらいから既にそうでしたが、Twitter などで個人的に尊敬している方々が結構このあたりの色であることが多いので、少しでも追い付けて嬉しいです。ですが知識量などまだまだ遠いなと思うことも多いです。(競プロにたまに役立つ話題の引き出しの数で差があると感じます。)

競プロは役に立つか

自分の経験としては、学業やインターンなどで役立つのは言うまでもなかったです。(効率が良いかは別問題です。)

個人的には「上位勢の取り組み方が AC 数などで可視化される」点が良いと思っています。競プロを始める前の自分は、どんな分野であれ結果を出している人間に対し「どうせ才能があるから……」と思っていたのですが、そのうちのだいたいは異常な量の努力をしていたということがわかりました。

もちろん本当に才能がある人もいますし、そもそも異常な量の努力ができるのも才能だという主張も同意できますが、それでも「自分ももうちょっと頑張ってみるか」という気持ちになれたのはありがたいなと思います。(まあこれは何かにしっかり取り組んで、他の上位勢と関わることができる環境なら基本的に当てはまるとも思います。)

謝辞

チームメイトをはじめとする同大学の競プロerや、フォロワーの皆さん、いつもありがとうございます。

おすすめコンテンツ

後で思いついたものは適宜追加します。

online-judge-tools
  • サンプルのダウンロードと一括テストが素晴らしいです。
  • なぜか自宅の回線だと自動 submit は壊れるので使っていないです。
  • verification-helper を導入するとライブラリの verify や提出コードへの貼り付けが楽になります。
Luzhuled's LibraryNyaan's Librarymaspy さんのライブラリ など
  • 知らないことが大量にあり勉強したいことを探すのに便利です。
  • ライブラリの実装方法についても参考になります。
  • ところで C++ を使うメリットとして、他の人が書いたライブラリをコンテスト中に使いやすいという点があると思います。
kotatsugame さん、SSRS さんの提出コード
  • 多くのコンテストに参加しており、マクロをあまり使っていないことから、実装の参考にするためによく読ませていただいてます。
デバッグマクロ
  • std::vector などを std::cout で出力できるようにすることなどを指します。
  • 自分は提出するファイルが長くなるのが嫌なので以下のように書いています。( debug.hpp にいろいろ書いてあります。)
#ifdef _RUTHEN
#include <debug.hpp>
#else
#define show(...) true
#endif
clang-format
  • フォーマッタを使うかは意見が分かれるところだと思いますが、「他の人のコードをフォーマッタにかけて見やすくするために普段から何かしらのフォーマッタを使っておく」という考え方もありだと思います。
  • 自分はファイルを保存したタイミングでフォーマッタが走るようにしています。
Competitive Programming Contests Calendar
  • これを Google Calendar に入れて、コンテストの日程を管理しています。
  • CLIST でも良いかもしれません。
AtCoder Clans
  • おそらく自分が競プロを始めてからできたので割と新しいサービスなのですが、さまざまなコンテンツへの導線としてかなり優秀だと感じます。