2022年7月2日のAtcoderBeginnerContest 258で念願の入緑をしました。

前回の入茶から約1ヶ月半で色変できたので、やってきたことをまとめたいと思います。
入茶記事:https://wild-outdoorlife.com/competitiveprogramming/atcoder-brown/
使用言語を Crystal に変更
入茶以前は Ruby を使用していましたが、問題を解いているとたまにですが、TLE から抜け出せないことがありましたので、思い切って Crystal に変更しました。
Crystalは Rubyの書きやすさ、C言語の速さをコンプセトに開発された言語で、
Rubyと似た(ほぼ同じ)構文で書ける静的な型システムが使えるコンパイラ言語です。
C++ とかより学習コストが低いと思ったので、選びました。
欠点としては、使用者が少ないのでネット上に日本語のドキュメントがとても少ないことと
Atocoder以外のサイト( AOJ や Codeforces )でほとんど対応していないことです。
学んだアルゴリズム
全探索
- 再帰を用いた全探索(DFSみたい)
- ビット全探索
二分探索
区間の判定や数え上げなど、いろいろな使い方。
グラフ
- ワーシャルフロイド法
- ダイクストラ法
- 0-1BFS
- UnionFind
- 木の性質
0-1BFSはまだ本番のコンテストで解いたことがありませんが、他は出てきました。
動的計画法(DP)
細かくはわかりませんが、EDCPの初級難易度で出てくるようなDPは覚えました。
桁DP、BitDP、木DPとかはまだ覚えていません。
数学系
- 二項係数の高速化(けんちょんさんの記事参考)
- 約数列挙、素因数分解、素数列挙、エラトステネスの篩など
- Modの性質
- 包除原理
- 組み合わせ
その他
- 周期性の問題(ダブリング)
- 平衡二分探索木( crystalには無いので自作 )
- 尺取り法
- 挟み込み累積和
- ビット計算
- 座標圧縮
他にもあると思うが、たぶんこのくらい。
ライブラリを自作する
典型のアルゴリズムをライブラリにすると、プログラミング言語とアルゴリズムの学習になるのでおすすめです。
ネットで落ちているのを使っても全然良いですが、自作すると使い方や変更などがわかりやすいです。
他のコンテストに出る
ロシアの競プロサイト Codefoces に登録して、毎週コンテストに参加しています。
頻度が Atcoder より多いのと典型アルゴリズムがよく出るので、勉強になります。
ただ、英語なので問題文がよくわからないことが多いです。私は英語ができないので、翻訳しながら解いています。
ひたすら典型と過去問を解きまくる
このスタイルは前から変わらず問題を解きまくって、慣れるのが一番だと思います。
ただ、問題の質の良し悪しがあるので、そこはネットの記事などでおすすめされている問題を優先的に解くのが良いです。
その中で、自分の色の一つ上の難易度を解くのが良いと思います。
2022年7月7日の達成度です。
私は才能無いし、頭も良くないのでこんだけ問題を解いてやっと緑です。

問題をたくさん解いているので早解きは得意ですが、すぐに答えを見てしまうので長考と数学が苦手です。
もっとひらめきとか数学力を高めれば、パフォーマンスが上がりそうなので、次は水色になれるよう頑張りたいです。
コメント