https://atcoder.jp/users/soraride
現在AtCoderでのユーザー名は「soraride」になっています。以前のニックネームの名残で、できればkani3campに変えたいですが、AtCoderだとユーザー名の変更が1回だけしかできないそうなので、将来的にkani3campよりもしっくりくる名前を思いつく可能性があるのでこのままにしてます。
前回の記事 https://kani3camp.com/2024/09/16/just-tried-atcoder/ を投稿してから1か月半たちました。
また、8月31日に始めてからのABC参加回数が10回になりました。(今のところ毎週参加)
途中からはAtCoderの熱が冷め始めて、平日はほとんど勉強しなくなっています。
それでもコンテストには一応参加継続しており、土日のABCの前後にはちょっと再燃して勉強することがあります。
今もまだ分野別 初中級者が解くべき過去問精選 100 問を解いている途中です。
二分探索まで(1~23問目)は全部通して、深さ優先探索、幅優先探索は半分くらい残して、今は動的計画法(ナップザックDP)のあたりを解いています。
まだ100問中3分の1くらいです。。
鉄則本は結局紙の書籍以外に電子書籍も買ってしまいました。あれかさばるのでね。。
両方買う価値はあると判断しました。
そういえば、先日のABC378では、茶色になっただけでなく、初めて4完(A・B・C・D問題)することができました!
しかし、目標である水色コーダーはまだまだ遠いです。
緑色ですら今年中にいくのは厳しそう
そもそもまだ触ってない基本アルゴリズムとデータ構造も多いうえに、問題演習量が圧倒的に足りてないです。
モチベーションはすでに下がっているので、水色になるためには短期決戦にする必要があるかもしれません。
正直、当初想像していたよりもレートの上がり方は緩やかです。
ABCは基本1万人くらいが参加していて、自分の順位は最近だと調子よければ5000位前後です。
この辺は灰色、茶色の人が多いですね。
3000番台になると水色も見え始めます。
とりあえず、現時点で自分がこれまでためてきたノウハウを思いつくだけ書き記します。
- まずは全探索で求める方法を考える(基本)
- C・D問題以上は単純な全探索だと時間切れになるので、制約を見て、どの変数がどれくらいの桁になるのか意識する
- 全探索といっても、ビット全探索二分探索とか、順列全探索とかあるので、どれに当てはまるか考える
- それぞれの要素をオン・オフするかどうか、という問題に帰着するのはビット全探索
- 桁が増えると一気に時間がかかるようになるので制約が緩くないとTLEしてしまう
- 並べ替え・組み合わせについての全探索は順列全探索
- 順列でも組み合わせでもC++ならnext_permutation関数が便利(組み合わせも順列全探索というかはわからない)
- それぞれの要素をオン・オフするかどうか、という問題に帰着するのはビット全探索
- 配列を使うのか、vectorを使うのかはどちらかをメインに演習しておいたほうが余計な事でデバッグに苦しまなくて済む
- ちなみに最近はvectorしか使ってない
- 競技プログラミングガチ勢の人たちの提出コードをみてると無駄がそぎ落とされまくってるけど、自分は将来的にコーディング面接などにスキルを活かしたいので、読みやすくするためにあえて冗長に書くことも重要
- わかりやすい変数名にする
- 処理を順序だてて見やすいように書き、コメントも駆使して可読性を上げる
- 配列の長さを必要以上に確保しない
- 解いたことのないアルゴリズムやデータ構造は扱えないということを素直に認める(自分は凡人である)
- つまり、事前に勉強しておかないと絶対に解けない。
- たまには解けるかもしれない、ではなく、解けない。
- だから自分のレベルが低いということではなくて、単に量をこなせてないだけ