1. はじめに
2025年の1月から1年以内にAtCoderで水色になることを目指して競技プログラミングを始めてから約4ヶ月、先日開催されたAtCoder Beginner Contest 405にて無事に入茶をすることができました。
ちょうど良い区切りだと思うので、実際のコンテスト成績やその分析、そして私が茶色になるまでやったことをまとめていきたいと思います。
目次
1.競プロを始める前のスペック
2.各コンテストの成績と分析
3.茶色になるまでにやったこと
4.できるようになったこととまだできないこと
5.最後に
1. 競プロを始める前のスペック
競技プログラミングを始める前は大学でJavaを勉強していたので、基礎的な文法(例えばif文とかforループ、配列とか)は知っていました。ですのでAPG4bを用いてC++を勉強した時に詰まることはなかったです。一方アルゴリズムに関しては全く知識がありませんでした。二分探索とかも怪しかったくらいです。
2. 各コンテストの成績と分析
2-1. 参加したコンテストの成績
とりあえず、私が参加したコンテストの成績(ratedは合計18回)の画像を貼ります。
2-2. 茶色になるにはどれくらいの成績が必要?
正直さっきの画像だけあってもわかりづらいと思うので、2,3,4(+5月のコンテスト1回)月ごとにコンテストの成績を分けてみようと思います。1月を含んでいないのはほぼ途中参加のratedで、あまり参考にならないと思ったからです...
(A,B,C,Dのところの数字はACするのに何分かかったのかを表してます。そして-は解けなかったことを示します。また、基本的にA→B→Cという順番で解いているので、Cの時間はA,B,Cを解くのにかかった時間となります。たまにA→C→Bがありますが...)
2月
コンテスト | A | B | C | D | 順位 | パフォーマンス | レート | レート変動 |
---|---|---|---|---|---|---|---|---|
ABC391 | 3 | 40 | - | - | 7662 | 255 | 67 | +20 |
ABC392 | 2 | 14 | 63 | - | 8145 | 255 | 87 | +20 |
ABC393 | 3 | 36 | 85 | - | 7742 | 298 | 108 | +21 |
ABC394 | 3 | 7 | 15 | - | 7709 | 312 | 128 | +20 |
3月
コンテスト | A | B | C | D | 順位 | パフォーマンス | レート | レート変動 |
---|---|---|---|---|---|---|---|---|
ABC395 | 2 | 30 | 50 | - | 6664 | 480 | 160 | +32 |
ABC396 | 3 | 6 | - | - | 7834 | 357 | 179 | +19 |
ABC397 | 2 | 61 | 45 | - | 6992 | 455 | 206 | +27 |
ABC398 | 4 | 15 | 25 | - | 5712 | 588 | 243 | +37 |
ABC399 | 1 | 17 | 21 | - | 4233 | 833 | 310 | +67 |
4月+5月1回のコンテスト
コンテスト | A | B | C | D | 順位 | パフォーマンス | レート | レート変動 |
---|---|---|---|---|---|---|---|---|
ABC400 | 1 | 9 | - | - | 7386 | 352 | 314 | +4 |
ABC401 | 1 | 4 | 43 | - | 5669 | 611 | 347 | +33 |
ABC402 | 1 | 4 | 42 | - | 5558 | 538 | 368 | +21 |
ABC403 | 1 | 45 | 24 | - | 4800 | 560 | 390 | +22 |
ABC405 | 2 | 5 | 11 | 27 | 2908 | 1056 | 487 | +97 |
正直コンテストごとで成績が良かったり悪かったりするので、参考になりづらいですよね...
ただ
- 2月はCを解くまでに60分以上必要だったのが3月には速くて20分代、遅くても50分で解けるようになった
ということは言えると思います。また、レート変動の方も見てみると、灰色の間は
- B問題まで速く正解できればレートは増えそう?
- 時間内にC問題までを解けたら+20くらい?
- 60分より速く解いたら+30(以上)はもらえる?
ていう感じっぽそう...? コンテストの問題の難易度によってもらえるポイントに結構差があるので断言はできないのですが、0から茶色を目指そうと思ったら
- まずは問題に慣れてA,B問題は必ず解けるようにする
- そしたらC問題にチャレンジして慣れる
- 解けるようになってきたらまずは60分で3完できることを目標にする
という流れでやるのが良さそうです。(あくまで個人的な意見なので、参考までに)
少なくとも今の環境(2025年5月)ではDまで解ける必要はないんじゃないかなって思います。理由は私がD問題を解けたのが18回中1回のみだからです(これが仕様なのか、それともあまり望ましくないことなのかはわかりません)。ですので茶色を目指す方は、まずはC問題までを解けるようにすることだけに集中してもいいと思います。
3. 茶色になるまでにやったこと
やっと本題です。といっても、やったことはほとんど1つだけです。それは
- AtCoder Problems + 公式解説でひたすら精進
です。これが茶色を目指してやったことの95%くらいを占めていると思います。残りの5%というのはAPG4bとかDPまとめコンテストをしたみたいな感じです。とりあえずどれくらいの問題を解いたか画像を貼っていこうと思います。
こんな感じです。(2024年の12月29日はもう2025みたいなもんです。許して...)
始めたのは冬休みごろでこの時はC++になれるため、APG4bにあった問題やA問題をたくさん解いていました。そして、試験などがいろいろ重なっていたため1ヶ月くらい間が空いて、春休みでゆっくりできる2月の頭あたりから本格的にC問題などの勉強に取り掛かりました。正直長期休みがなかったら茶色になるまでもっと時間かかってたと思います。(早く夏休みならないかな...)
この間に覚えた(出会った)アルゴリズムとかは
- 二分探索 (ABC365Cより)
- 尺取り法 (ABC388Cより)
- Bit全探索 (ABC384Cより)
- BFS (ABC383Cより)
- DFS&再帰関数 (ABC317CとかABC367Cより)
- 累積和 (ABC318Cより)
- DP(ナップザックとか初歩的なものだけ) (ABC369Dより)
- ランレングス圧縮 (ABC380Cより)
- ダイクストラ法 (ABC362Dより)
とかで、データ構造は
- Union Find (ABC304Cより)
- グラフ理論 (ABC311Cより)
- 木 (ABC368Dより)
みたいな感じです。そして学んだ標準ライブラリは
sort | reverse | min/max | swap | string |
---|---|---|---|---|
vector | queue | deque | stack | map |
set | pair | lower/upper_bound | next_permutation | abs |
priority_queue | lcm/gcd |
パッと出てくるのはこれらあたりです。
どうやって精進したの?
基本的には
①まずは10分くらい考えてみる
↓
②全くわからなかったらその時点で解説を見る
↓
③解説を見ながらどこの部分がわからなかったかを見つける
↓
④一度解説を見終わったら、誰かに説明するつもりで問題をもう一度解く
↓
⑤翌日、一週間後とか間隔を開けてもう一度解く(解けなかったら②へ)
と言った感じです。AとかB問題くらいだと解説も10分くらいであまり体力を使わないんですけど、これC問題以降になると大体1問理解するのに1時間くらいかかるんですよね... たまに全然理解できないこともありました。ですので、C問題が全然わからなくたって落ち込む必要はないと思います。
1日どれくらいやった?
春休みの約2ヶ月くらいは大体1日2コンテスト分のA,B,C問題をやって、慣れてきたらD問題にも挑戦し始めた感じです(ただ大学がまた始まったら精進できない日があったり、明らかに精進の質や量が下がっています...)。
4.できるようになったこととまだできないこと
できるようになったことをざっとまとめてみると、
- 計算量の意識ができるようになった
- 工夫(考察)をする癖がついた
- シンプルに知識が増えた
という感じです。とはいえどれも全然完璧ではありませんし、あくまで前よりはできるようになったということです。
逆にまだまだ足りないことは
- コーディングのスピードが遅い
- Cまでがまだまだ安定してない
- 考察に時間がかかりがち
- コードのミスが多い
って感じです。正直茶色になっただけでまだまだできないことやわからないことだらけです。だからまだまだ満足せず、年内水色達成できるように頑張っていきたい!!
5.最後に
ここまで読んでくださり本当にありがとうございます。初めて記事を書いてみたので、すごく読みにくかったと思うのですが、少しでも誰かのお役に立てたら嬉しいです。次はまた緑になれた時にでも記事を書いてみようと思います。その時にまたお会いしましょう! それでは!!(あとリテモスというYouTubeチャンネルで、成長記録としてABCの様子を編集して投稿しているのでもしよろしければそちらもみてくれたら嬉しいです...!!)