はじめに
こんにちは!K2という人です。(ねこアイコンですが)
直近(2025/12/20)のABC437で、ついに!!入青できました!!!
大きな節目だと思いますし、今まで何をしたかまとめてみたいな・それが誰かに役立ってくれればいいなと思って記事を書いてみました。振り返りのような感じになるかな?
個人でなにか書くのは初めてで、拙い文章かもしれませんが...許してください!!
ちょっと自己紹介
中学2年生です。
AtCoderは先輩がやってたのを見つけて、中1の5月から始めました。
メインの言語はPythonで、気分や速度の心配などでC++も使います。
小学生のころ高校数学を1通り勉強していたおかげで、数学問題は得意なほうです(と自認してます)。
AtCoder開始~入水まで
ここはざっくり書いておきます!
始める前からPythonの文法をある程度知っていたこともあり、鉄則本を読んで少ししたらスムーズに入茶できました。
その後の入緑・入水まででは、ABC参加・過去問を少し解く ⇄ 鉄則本・けんちょん本やネットの記事で勉強、みたいな感じだった気がします。(あまり覚えてない...)
少なくとも、たくさん問題を解いて精進していたわけではないです...

↑ これは1日ごとの解いた問題数ですが、一定間隔で棒が立っています...つまりABC参加が主です。
入青まで
夏から10月くらいまで、競プロ以外が忙しすぎてろくに精進していません。そのせいもあってか、入水してからしばらくはレートが1200後半~1300前半で停滞していました。
そこで秋ごろから、今までよりたくさんがんばって問題を解きました!!(特に水diff~青diff、NoviStepsでは1D~2Dの問題の練習ですね)
400AC→800ACになったらしいです。そうしたら、自分でもびっくりするくらい急にレートが伸びてしまいました...幸運もあったと思いますが、急に自力ACできる問題が増えてうれしかった記憶もあります。(詳しくは後ほど)
ただ精進がよいというのはけっこう自明な気もするので、精進の方法もですがモチベーションを保った方法も多少紹介できればと思います。
ではしたことを書き連ねていきます:
ABCの過去問を解く
一番はやはりこれです。先ほども書きましたが、水diff~青diffの問題に取り組みました。
ここで自分が特に使ったのは、AtCoder NoviStepsというサイトです!!
こんな感じ↓で問題に固有の難易度付けがされていて、その基準が自分によく合うと感じました。解法別の問題集もあったりして個人的にとても好きで、ぜひおすすめしたいです!
水色コーダーだった自分は、1Dで解けなかった問題を埋める → 2Dの問題に挑戦してみる、の順で解いていました。自分の現時点のレベルより高い問題になるので当然難しいんですが、たくさん解いていると少しずつ考察ができるようになる感じがしました。
遅延セグメント木やいろんなdpなど新たな知識も必要になりますが、青を目指すなら"いろんな応用・言い換えなどができるか"も重要だと感じました。
その能力を培う一番の手段が問題を解くことで、考察力?を成長させるにはがんばってたくさん問題を解くしかない気がします。
逆に、たくさん解いていれば慣れますし、既存の知識がすぐ出てきたりコードの実装が早くなったりを実感しました。人によって必要量は違いそうですが、やはり自分なりにやるしかないと思います。
また、AtCoder ProblemsのRecommendationから問題を選ぶこともよくありました。
NoviStepsかこっちかは気分の問題ですが、ModerateかDifficultを先ほどと同じ感じで解いていました。
また、時間があるときはたまにAtCoder Daily Trainingに参加してました。競技形式でできるのは単純に楽しいです!
問題を選んでくれるのもありがたいですね。
時間制限のある中で解きますし、コーディング速度の意識とかにいいのかもしれません。
(わたしはあまり気にしていなかったけど)
ライブラリを作る(ちょっとだけ)
AtCoder Libraryに頼っている部分がだいぶ大きいですが、一部のたまに出てくるやつを手元に置いてます。
これがあれば楽できるな、とかこれの実装不安だな、とかが水色になって増えてきた気がするので、精神的に安定する面でもいいかもしれません。
例: combination.py (二項係数のやつ、比較的よく使う)
MAX = 1000001
MOD = 998244353
fac = [0] * MAX
finv = [0] * MAX
inv = [0] * MAX
fac[0] = fac[1] = 1
finv[0] = finv[1] = 1
inv[1] = 1
for i in range(2, MAX):
fac[i] = fac[i - 1] * i % MOD
inv[i] = MOD - inv[MOD % i] * (MOD // i) % MOD
finv[i] = finv[i - 1] * inv[i] % MOD
def comb(n, k):
if n < k:
return 0
if n < 0 or k < 0:
return 0
return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD
ここからはモチベーション寄りの話です。
誰かと一緒にやる・競い合う
"競技プログラミング"の競技の部分が好きな人は、これが大きなモチベーションになると思います!
わたしはいくつかDiscordの競プロ鯖に入っていて、そこで他人の精進を見たり、自分が解いた問題を投げたりしてました。鯖では単純な雑談もしてて、わからないことを聞けたりなどいつも助かってます。
あと他人(特に同級生)のレートとかコンテストの成績とかを勝手に気にしてます。
自分と近い人をライバル視?するのは、わたしはけっこうやる気になりました。(嫌な人がいたらごめんね、ほんと勝手にしてます...)
また、AJLのランキングも気にしてました。入賞すればトロフィーや賞状ももらえますし、同級生との競い合いは楽しいです。
ちなみに2025年12月現在の自分は4位です!!このまま過去最高順位を取れたらいいな~
(なんで同級生に黄色が2人もいるんだろう...)
Streakを繋ぐ
AtCoder ProblemsではStreakという数値が表示され、これは問題をACした日が連続で続いた日数です。
今のわたしは 46 days、がんばってると思います!!
今はがんばってますが、この前まではLongest Streak: 5 daysでした。
一度たくさん繋ぎ始めると、Streakを切らさないように...っていう緊張感が生まれるんですよね~
もし続かない人がいたら(最初はどうにかがんばって!!)1週間くらい続けてみてください!そのうち習慣になってくると思います。
頭に問題を入れておく
さて、わたしは学生で、四六時中暇だよ~というわけではないです。その中で毎日問題を解こうと思ったとき、学校に居る時間を使えたらうれしいです。
そこで、「朝に問題を読んでおいて、休み時間などで考察し、帰ったら実装する/解説を見る」ことをしてみました。8時間くらいの学校にいる時間がけっこう活用できて、この方法で1日2,3問の精進ができるようになりました!!
欠点は、周りから見た時挙動不審になる場合があることです...急にあ!!って声を出しちゃったりとか、ちょっと変かも
まあわたしほどでなくとも、隙間時間に競プロを考えてみるのはおすすめです!!
まとめ・その他
たぶん主なことはこのくらいだと思います。なにか1つでも役立ってくれたことがあればとってもうれしいです~
ところで、入青記事どうしようかな~~ってなってたときにTwitterで投票作ったんですが、80人以上の方が読むって言ってくださってほんとびっくりしました...読んでくれてるかな!!|д゚)
また、この後には黄色がありますが、入青よりもさらに時間がかかる気がしています。来年中になれるのかなあ...
あと直近の目標は、JOIファイナル出場です!あと2ヶ月ほどあるので、それまでにもっと精進して望みたいと思っています!!
最後に、参考までに?今の時点でのAtCoder Problemsの記録を貼っておきます。(未来の自分が見るかもしれないしね)
こんなにたくさん読んでいただいてありがとうございました!!!!!










