Qiitaでは初めまして。にるれです。
僕は2025年11月1日(rateが反映されたのは二週間後)にnirureで入水をしました。
空白期間を除けば約一年半かかりました。
今回は高校受験で高校に入学した高校生がどうやったら競プロで水色コーダーになれるかを解説したいと思います。
1. この記事を読む人にまず伝えたいこと
この記事はこれから競技プログラミングを始めようと思っている高校生やなかなか茶色~緑色からratingが伸びない人向けに書いてある記事です。
まず競技プログラミングは頭脳の違いという普段見えにくいものが明確になって表れる競技です。
よくAGCやARCが天才以外お断りパズルコンテストなどと言われてるように上位に行けば行くほど、公立高校受験のような暗記や内申などで勝ち取るものが頭の良さだと信じ込んでいた私たちに圧倒的な現実を突きつけられます。
また上記より、努力しても自分の能力に限界が見えてくるところがあります。
正直、水色コーダーになれるポテンシャルはrating遷移を見るに僕がぎりぎりだと思っています。(実際高2の終わりで入水しているため)
さらに、普通の高校生では努力をしてもかなり結果を残しにくいという点から周りの目も冷たいです。
僕は強い先輩のおかげで、実力以上のオンサイトなどにも出場実績があったためましだったとは思います。
それでも、完全に肯定的とは言い切れない環境でした。
なので、よほど才能がない限り競技プログラミング(競技科学)に高校人生をささげると決めたならこの壁を乗り越える必要があります。
覚悟を決めてください。
2.水色コーダーになるためにやること
これからは各色になるまでやったことを紹介します。
茶色まで
正直茶色コーダーは誰でもなれます。
やることは灰diffを解くだけです。
AtCoder Problemsのbacha gachaで灰色diff(0~399)を選択して連打してできたコンテストの問題を全部解けばいいです。そうすれば気づいたら茶色になってます。
灰色でやるアルゴリズムは、ちょっと頭いい人ならだれでも思いつきそうなものがほとんどなので、それを説明されれば誰でも理解できます。
茶色になるまでに覚えといたほうがいいもの(重要度順)
・累積和(一次元)
・imos法(一次元)
・bit全探索
・順列全探索
・二分探索
・stack(vectorで代用可),queueの基本的な動作
・set,mapなどの連想配列の基本的な動作
・グリッド上の移動、正方形グリッドの回転
緑色まで
緑コーダーになるまでは少し大変かなと思います。この記事の対象に当てはまってる人はしっかり精進をしなければなれないと思います。
まず緑になるためにマストで解かなければいけない茶色diff(400~799)の問題から、扱うアルゴリズムの幅が一気に広がります。
また、最近は参加者の技術がインフレしているので前よりもかなり扱うアルゴリズムの幅が広くなった気がします。
正直これもbacha gacha連打でも何とかなりますが、動的計画法やBFS,DFSなど、一度しっかり学習しないと手が付けられないアルゴリズムも大量にこの頃出てくるので、それらをまず調べてから手を付けるようにした方がいいです。
またこのころからかなり計算量を意識する必要があるため、二分探索や連想配列などを効果的に使う力が要求されます。
緑色になるまでに覚えといたほうがいいもの(MS:事前学習するべきもの)
・幅優先探索(BFS) (MS)
・深さ優先探索(DFS) (MS)
・ワーシャルフロイド法
・Union-Find (アルゴリズム自体は難しいがACLにより使うだけなら茶色相当)
・ダイクストラ法 (MS)(茶色はアルゴリズム貼るだけで溶ける問題がほとんどだが絶対空でかけるようにした方がいい)
・動的計画法(部分和、ナップサック、状態遷移が主) (MS)
・set,map,priority_queueを効果的に使った計算量の削減
・配列上の二分探索(upper_bound,lower_bound)を使った計算量の削減、尺取り法
・約数列挙
・エラトステネスの篩(MS)
・論理和、論理積、排他的論理和の性質、計算(MS)
・二次元累積和、二次元いもす(MS)
・メモ化再帰
水色まで
正直な話、しっかり競プロやってれば緑はいけます。問題は水色からです。
水色パフォーマンスを出すにはほぼABCDEの5完かE以降が壁の時は4
完早解きが必須になってきます。
いずれにしてもABCは難易度順であるためA~Dの早解きは必須です。
A-Dは基本的に最高が緑なので緑diff(800~1199)をいかに早く解けるかが緑コーダー内で差をつけるポイントとなってきます。
正直緑diffの問題は基本的には茶色でやってることを難しくしたり合わせたりしている問題が多いです。緑diffで使われるアルゴリズムは基本的に茶色と変わりないといっても差し支えないです。
なのでとにかくなれることが大事です。
なれるには何度も同じ問題を解いて解法を身に着けることが大事です。
前書きでさんざん競プロは地頭ゲーみたいなことを言ってしまいましたが、ここは本当に努力です。
前述のbacha gachaでABCを模倣したバーチャルコンテストを建ててください。おすすめは、灰灰茶茶緑緑緑を1時間以内に解くことです。これを半年続けたことで、かなり早解きが安定するようになりました。
ただ、これだけでは1230みたいなperfはでても伸びる決定打となる1400とかは出ません。
前述のとおり茶緑間で使うアルゴリズムにはあまり差異がありませんが緑と水はかなり違います。
なのでこのころから定期的に水色の問題を解いてみるようにしてみてください。
またわからない問題に対するアプローチとして、答えを丸写しするのはもちろんだめです(自分はそれでかなりの問題数を無駄にした過去があります)。
しかし放置するのもあまり身につきません。
なので解説の解法のとこだけを見てしばらくたってから空で実装できれば、提出してもいいと思います。
答え丸写ししたみたいで不安になりますが、空で実装できてる時点でひらめきが一つ浮かばなかったというだけなので問題はないと思います。
水色になるまでに身に着けといたほうがいいもの
・複雑な全探索
・Segment Tree(原理は覚えるべき)
・Lazy Segment Tree(たまに使える問題があるので貼れるだけでいい)
・頂点倍加、超頂点、特殊な状態を持ったBFS,DFS,Dijkstra法
・割合などに関する二分探索
・DP(桁,bit,木)
・最小全域木
・nCr型のDFS
・多倍長整数
・枝刈り全探索
・半分全列挙
・set,map,priority_queueを使った情報の管理
・Rolling Hash(MS)
・木の性質
コンテストに出るうえで気を付けること
ABCでは結構ガチ目に一秒が順位を左右します。
なので僕は最初からA問題のリンクを開いておき、F5連打(1key/s)でいつも始めています。
僕は緊張症なのでC問題からは問題を提出してから結果を待ってしまっているのですが、正直それは無駄なのでAtCoder Result Notifer(調べれば出てきます)を使って提出したらすぐほかの問題を解くようにしましょう。
またDは10回に一回くらいEよりむずかしくなるので適宜順位表を見てどっちを解くべきかを決めましょう。E,Fはさらにそれが顕著な気がします。
Dが苦手な緑、Eが得意な水色みたいな回は割と多いです。同じ四完でもperf差が一色違うこともあります。Dがわからないor実装がかなり面倒くさい場合は焦らず一旦Eを見てみましょう。
負けた時のメンタルの保ち方
どれだけ精進しようと落ちるときは落ちます。それが2週間、3週間続くとかなり人生に絶望し始めます。
ratingグラフ見ればわかると思いますが僕も一か月間毎日水色を5問くらい解いてるのに出るperfornanceは800弱、みたいなゴミみたいなABCが続き、私生活の多忙も重なってかなり精神をやられました。
夏休み以降もPCK予選落ち、友人関係のトラブル、瓦3落ちなどが起きました。書き起こすと本当によく耐えれたなと思います。
正直負けた時は精進しまくって来週に期待するか土日だけほかの事するしかないと思います。反省も重要ですが気にしすぎても悪循環です。
3.最後に
正直緑色コーダーまでは自分が競技プログラミングが趣味であることを人に誇れる感じではなかったのですが、水色になったことでかなり自分のやってきたことに成果を少しは感じられるようになりました。
またmin(入青、自己満自分のコーディング)記事で会いましょう。









