0. はじめに
初めましてnouka28です。
先日のABC325で2回目の黄perfを出し、青コーダーになりました!!
https://atcoder.jp/users/Thinkingpegasus/history/share/abc325
AtCoderの色ランクの評価を見ると、
青色 (Aランク R1600~1999 上位7%)
青は超優秀です。学生時代を競技プログラミングに注ぎ込んでも、ここにたどり着けない学生は大量にいます。競技プログラミング未経験者では、このレベルと競技プログラミングで戦うことは殆どの場合は無理です。8割以上のIT企業において、アルゴリズム力はカンストです。一部企業においては、少し持て余してしまうかもしれません。
https://chokudai.hatenablog.com/entry/2019/02/11/155904
ここにたどり着けない学生がたくさんいるなか、中3でなることができたので感無量です。
普段の地道な努力が結果として実ってくれて、競プロを出会って、続けていて良かったと思っています。
1. 自己紹介
中学3年生です。
プログラミングは中1の秋くらいScratchをはじめ、Python、競プロは中2になってから初めたので他の中高生erと比べたら始めた時期が若干遅いかもと思ったりしています。
得意教科は数学で、OMC水色ですが、競プロの数学についてはまだ初心者だと思っています。いつか数学つよつよマンになりたいです。
2.やったこと
茶色まで
それと言ったことは何もやっていません。当時は競プロに関する情報を何も知らなかったのでただコンテストに参加するということをしていました。
緑色まで
JOIの2次予選にたまたま通ってしまい、JOIの本選に向けてC++とアルゴリズムの勉強をしていました。
「競技プログラミングの鉄則」という本を買って猛スピードで読み進めていました。
JOI本選は177点で終わりましたが、それ以降も競技プログラミングの鉄則を1周して累積和や二分探索、DPなど基本的なアルゴリズムを身につけて、そのペースで入緑することができました。
新たに覚えたアルゴリズム:
- bit全探索
- 累積和
- 二分探索
- 尺取り法
- 基本的なDP (部分和、ナップザック、LCS、区間DP、bitDPなど)
- DFS、BFS
水色まで
蟻本を買いました。初級編と中級編を読んで、競技プログラミングの鉄則の復習にもなり、よりアルゴリズムがしっかり身につきました。
新たに覚えたアルゴリズム
- $O(\sqrt N)$ の素数系諸々
- modをとるnCr、繰り返し2乗法
- Grundy数
- Dijkstra法
- UnionFind
- ダブリング
- ローリングハッシュ
- セグメント木(RMQ,RSQ)
- 最小全域木
青色まで
PythonとC++を2つ使いこなしながらコードを書けるようになりました。
C++はテンプレートを作り、可変長の関数input,printなどはとても役に立ってます
aclibraryを使うようになり、また自分のライブラリの整備をするようになりました
ライブラリを整備することで実装がめんどいDijkstraなどをコピペするだけの状態にできたりなど色々便利になりました。
アルゴリズムを覚えるというより過去問を埋めることに専念していました。
水色になってからはABCの水~青diffを中心に解いていました。毎日最低1問を欠かせずに埋めていきました。
新しく覚えたアルゴリズム:
- Weighted UnionFind
- 抽象化セグメント木、抽象化遅延セグメント木
- Mo's algorithm
- LCA
- Euler Tour
- SCC
- PrioritySum (概要だけ)
- FPS (概要だけ)
そしてABC325でついに黄perfを出し+100で青色になりました!!
3. 今後について
3ヶ月で緑から水になり、3ヶ月で水から青になりました。だから3ヶ月で青から黄になりますというのは無理なので、青色を維持しつつ黄色を目指して頑張りたいです。JOIも過去問を埋めていきたいところ。