しょぼんブログ

数学の色々とか様々とか

AtCoder 黄色になりました!(橙→黄になっただけなので中身は入橙記事)

AtCoder Regular Contest 173 で、AtCoder 橙色(2400) になることができました!

AtCoder Grand Contest 066 で、AtCoder 黄色(2000) になることができました!

この記事は?

この記事は長い自分語りです。

前回の色変記事は2020年4月の入緑のときに書いたので、本当に久しぶりに色変記事を書くことになります。

qiita.com

競プロを初めてから約4年、そして入黄してから約1年半で黄色になることが出来ました。

(一応)この記事は入橙記事の下書きを完成させただけなので、実質入橙記事です。

やったこと

緑時代 (2020/04~2020/06)

緑までは根性でプログラミングをしていました。当時、自分の実力では Rating 1000~1200 くらいで停滞すると思っていたので、競プロを精進し、典型問題・典型テクニックを習得し始めました。その点では、競プロerとしての競プロがようやく始まったかもしれません。

しかし知識的にはおそらく同レート帯より少ないです。同レート帯に比べて速解き・数学が上手だったのでレートが上振れしました。

知っている:簡単なDP、BFS、決め打ち二分探索、imos法、優先度付きキュー、BITなど

知らない:DFS、UnionFind木、セグメント木、ダブリング、半分全列挙など

AtCoderの解いた問題数(累計、色はdiff):その他36、灰127、茶63、緑41、水18、青5

水時代 (2020/06~2021/06)

東京海上日動プログラミングコンテスト2020(2020/06/13)で入水しました。

ここまで順調にレートが伸びてきてたのですが、レート1400付近で停滞しました。当時高3で受験生だったこともあり、2020年10月に競プロを中断して受験勉強に専念しました。

その後、東工大理学院に合格して、競プロを再開しました。東工大のサークルtraPに入った後に少し精進をして、レートがサクサク上がりました。(この頃にセグメント木などの中級の典型を学びました)

AtCoderの解いた問題数(累計、色はdiff):その他124、灰361、茶117、緑91、水48、青19、黄2、橙1

青時代 (2021/06~2022/07)

ABC206 (Sponsored by Panasonic)(2021/06/19)で入青しました。

かなり上振れでの入青で、実際の実力はレート1500程度だと思います。そこからの半年くらいは、競プロの精進をあまりやらず、コンテストにだけ出ている期間でした。(当然?)レートは伸びず、その期間のレートの最大値は1771、最小値は1548でした。

2022年2月の初めくらいに競プロの精進を再開しました。この精進は今まで2年間続いていて、ここが自分の今の競プロの第二の原点だと思います。2月から7月の入黄までに約500問を解きました。また、codeforcesや他のサイトにも参加し始めました。

この精進で青レベルの典型知識はほとんど身に着け、同レート帯に比べて知識も十分、という状態になりました。数学力は青の中では平均以上だがトップではない、という感じだと思います。緑色の時代からあった速解き能力はこのレート帯になって特技ではなくなりました。

AtCoderの解いた問題数(累計、色はdiff):その他264、灰709、茶204、緑162、水154、青129、黄74、橙24、赤5

黄時代 (2022/07~2024/03)

ARC144(2022/07/16)で入黄しました。

2022年7月から2023年1月まで、ABCでは勝てるがARCでは勝てず、レートが停滞したり青に落ちたりする、という状態にいました。いわゆる黄溜まりです。黄溜まりは大量におり、黄色全体の半分以上を占めています。

ABCとARC・AGCは傾向がかなり違っており、ARC・AGCは一問一問の考察がABCよりも重いです。また、ARC・AGCは頻度がABCより少ないことから、同じ期間でレートが上がりにくいことが黄溜まり大量発生の原因と考えています。

しかし、精進を続け、いつの間にかARCでもだんだん勝てるようになってきました。2023年1月28日以降は青落ちしていません。しかも、黄溜まりを抜けた瞬間橙コーダーが一気に近くなったような気がします。

2023年3月から、ICPCのチームで練習を始め、C++をメインに使い始めました。今まではPythonが8割、C++が2割のPythonメインの二刀流だったのが、Pythonが2割、C++が8割のC++メインの二刀流になりました。

2023年8月からは 2nd Universal Cup にも参加するようになり、ICPCの練習をしました。ICPCは国内予選・Regionalともにいい順位で突破し(自分はどちらもパフォーマンスが良くなかったですが)、ベトナムのPlayoffに参加しました。その後、競プロをやり続けついに橙になりました!

黄色コーダーになってから、同レート帯の多くが数学上手で、自分の数学力が平均レベルになっていました。代わりに精進を多くしていたため、実装力と知識が平均以上になったと思います。ICPC練習・精進で考察が鍛えられたため、橙コーダーになれるくらいの力がつきました。

AtCoderの解いた問題数(累計、色はdiff):その他1561、灰969、茶349、緑333、水352、青318、黄251、橙138、赤49

橙時代 (2024/03~2024/04)

ARC173(2024/03/10)で入橙しました。

Mojacoder で「しょぼんの橙おめでとうコンテスト」を開催しました。50人以上の方に解いていただいて嬉しかったです!

最終問題が「多項式の合成」を求めれば解ける問題で、当時は一般に  O(N^2) 時間かかっていたのですが、問題準備中に  O(N \log^2 N) 時間で解く方法が発見されてしまい、一週間で問題の難易度が変わってしまうという面白い事態になりました。他にも、8問目の Wines はやや自信作です。

mojacoder.app

AtCoderの解いた問題数(累計、色はdiff):その他1595、灰976、茶351、緑341、水354、青321、黄261、橙139、赤49

思い出の問題厳選2問

いままでの競プロ人生に最も影響を与えた2問を紹介します。

ABC158 E - Divisible Substring (2020/03/07)

atcoder.jp

この問題の Diff は 1866 です。茶色コーダーのとき、この問題を解こうとして失敗しました。そして、他人の提出コードを見て理解しようとしました。

解法が分かったとき、大きく感動し、競プロとは何たるかを理解しました。競プロとは、数学だったのです。このとき、競プロにハマりました。まさに人生を変えたと思います。

ABC239 Ex - Dice Product 2 (2022/02/19)

atcoder.jp

2022年2月に精進を始めたころ、この問題に出会いました。コンテスト中にE問題まで解いたとき、Exをチラっと見て「この問題に取りかかれ」と言われているような気がしました。それで書いてみたら、終了の2分前にACして大興奮しました。当時は解説に書いてあるようなアルゴリズムを知らなかったので、ACは奇跡的でした。しかも、この問題はコンテスト中に解いた初めての橙diffです。

コンテストの少し前(一週間前?)から精進はしていたのですが、この件もあって完全に競プロにハマってしまいました。この問題もまさに人生を変えたと思います。

黄→橙

橙以下のdiffだと「知らない典型が出て破滅した!」ということはあまりなくなってきました。黄色になってから学んだ典型もありますが、青時代の典型よりも重要度は低いです。しかし、中~高度の典型や細かい典型も重要だと思います。(自覚してないので分かりません)。

黄→橙に行くために重要なのが、ARCで勝つための考察力(直感)と、バグで破滅しない実装力だと思います。「考察方針で難しい方に行ってしまい、複雑な実装を始めてしまう」ということは何度かあると思います。そこで実装しきることができればなんとか耐えることができます。

橙→黄

逆に、橙から黄色になることは簡単です。コンテストにRated登録し、一問も解かなければよいです。

すみません

黄落ちした負け惜しみみたいな記事に見えてめちゃくちゃ落ち込んでいると思われているかもしれませんが、別にそんなに落ち込んでないです。

橙はゴールではなく、むしろ自分の(今の)目標は AtCoder 赤なので、赤の実力をつけるように頑張りたいと思っています。赤の実力が付けばもはや黄落ちとかの次元にいないと思います。

自分の弱点は考察付きの赤diffが全然通せない(ARC・AGCでコンテスト中に赤diffを通したことがない)ことなので、難問を難なく通せるように、難問を中心に精進したいと思います。

もちろん速解きも訓練します(むしろ赤diffを考察する時間を確保するために簡単な問題の速解きが必要、という話はある)