ZOIです。2023/8/12のABC314 (円周率) で入水したので記事を書きます!
現在のレート変化はこんな感じ。見ての通り緑に入ってからガタガタしてます
入緑記事もどうぞ↓ (内容は被ってるところもあるかもです)
https://qiita.com/ZOI_dayo/items/3548d3081ac7c44f8669
自己紹介
ZOIといいます。現時点では高3です。受験勉強は知りません。ちなみに記事を書き始めた今日は18歳の誕生日です(どうして誕生日からこんなものを書いているのか...)
プログラミング経験としては
- 小学校ではArduino, Minecraftのコマンド, MinecraftのComputerCraft
- 中学校ではMinecraftのModding、Minecraftのサーバー管理、Webページ制作
- 高校ではWebページ制作、Webサーバー管理、Minecraftのサーバー管理、DiscordBot作成、アプリ制作、etc... + 競プロ
という感じです。本当にマイクラに育てられた気がします。
入緑以後
入緑は2023/2/19のABC290だったらしいので、それ以後の話です。
入緑直後、2回くらいABCをサボっていたっぽいです。たしか塾の春期講習みたいなものが合ったんだと思います。
その後、ABC293で1288perf(水下位)を叩き出しレートが882に。断頭台を脱出できました!
その後は1050perf(緑中位)あたりを安定して出せたので、まあいい感じに上がっていきます。といってもABC297で725perf(茶下位)を出して冷えたりしてますが...
しかし、これに続くのはABC298, 299です。この番号に見覚えがある人もいるでしょう...そう、Unratedまつりです...!!!(DDoSゆるさん)
このときZOIはどうだったのかって? こちらをご覧ください(Unratedのコンテストの予測perfを表示するスクリプトを使っています)
あの...水色perfが消滅してる気がするんですけどなんですかこれ...
コンテスト中は、「なんか重いなw」→「Twitterでみんな騒いでて草、Unratedはやめてね」→「うわああ(死)」をやってました()
(ABC300はキリが良かったけれども塾の面談が入って受けられませんでした)
ABC301で定期死亡を回収し、次に進みます。
AtCoder Junior League
皆さんご存知でしょうか...実は2023年から、AtCoder上で中高学校対抗戦が開催されているのです!
(ギリギリ高校の間に始まってよかった〜!)
詳しくはこちらをどうぞ↓
AtCoder上のページ
まあなにかというと、「ABC/ARC/AGCに参加してね!」「$2^\frac{perf}{400}\times1000$としてAJLスコアを定義するよ!」「Unrated登録でもAJLには計算されるよ!」「期間中に参加したコンテストのうち、いい方から10個を取ってきてそれらのAJLスコアの総和で戦ってね!」というやつです。
つまり高いパフォを取れば学校のランキングが上がるということです。(当たり前)
ZOIの学校には、ZOIの代で始まった「PC部」という組織があります。(といっても同好会ですが)
下の学年への布教をサボり続けた結果存亡の危機に陥ってしまったので、急いで学校にチラシを張ったり、知り合いに宣伝したりした結果、いきなり(ほぼ未経験者ですが)30名程度が参加してくれました。ありがたい限りです...
で、です。目の前に大量のプログラミング未経験者がいる。今から始まろうとしているのは学校対抗の競プロコンテスト。人数が多いほうが単純に有利なルール。やることは一つです。
布教です。
というわけで部活のDiscordに長文を投下。
ついでにAtCoderのコンテストを通知してくれるDiscordBotを作り、それも入れておきました。
(実はZOIと同じ学年にも競プロやってた人がまあまあいました。灰x2、緑x2くらい。でも、受験学年にもなってのんきにカタカタしてるのはZOIしかいなかったようです...)
結果、数人参加してくれました。入出力のやり方が分からず0完、みたいな人がいて申し訳なかったです...
講座みたいなのもやってみたりして、それはそれで面白かったです。
弟の進撃
ここらへんで異変が発生します。弟(双子)が競プロ界に来てしまいました。詳しくは彼の入緑記事を見てください。
実は、弟氏はかなり算数・パズル・数学あたりが得意な人でして...
例えばABC292-Fという問題を見せたときのことです。僕は「1辺の長さで2分探索したらいいでしょw」みたいなことを思ってたんですが、「行列で回転させれば解析的に解けるでしょ。はい、この式を実装すれば終わり。」と言われました。行列って何。
彼、当時は灰中位ですよ...
というわけで、彼はABC296で入茶、ABC310で入緑と爆速で襲ってきます。やっぱり数学できる人は強いね...
ただしこちらも6年間をPCに溶かしてきた人間なので、そう簡単に追いつかれるわけにはいきません。ここで、弟氏より先に入水するのが一つの目標となってきました。
覚醒と停滞
グラフをよく見てみましょう。
白い線の直前くらいでバコーンと上がっているところがありますね。なんですかこれ。
この青色ですね。現時点での過去最高perfです。少し前を見ると分かる通り、ABC298, 299, 304, 306と4回の水色perfを消されているので「ゆるさんぞAtCoder」状態だったのですが、この時点で「青パフォくれた! AtCoder大好き! 許す!」となりました。手のひらグルングルンです。
その直後のABC308は見なかったことにしましょう。perfが乱高下しすぎです。これが僕の特徴の一つではあるのですが...
ここでAJLのスコア計算を思い出してみます。
$$2^\frac{perf}{400}\times1000$$
でしたね。そして、期間内のコンテストのうち、上から10個を取って評価してくれるというわけです。
この式を読み解くと、「1000perfなら5657」「1200perfなら8000」「1400perfなら11313」となるわけですね。そして1869perfなら25501です。ウオオオ
つまり、ZOIの乱高下するperfは、良いスコアだけを取ってくれるAJLにはピッタリだったということです!
ということもあり、記事執筆時点(入水時のABCは反映されていない)では15位に配置させていただいています。
ただしひどいときはひどいので、さっきのグラフみたいに「上!!横横横...上!!」みたいなレート変動になるわけです。
そして入水へ
停滞を繰り返していたのですが、ABC312で空気が変わります。
このときのDiffはこれ。chokudai原案のEが爆走しています。
Eを誰も解けていないことに気づき、Fへ逃走。うしさんのライブラリからぴったりなものを発見し、ACを叩き出しました。ABCDFの5完、レートは1085から1152へと大幅にアップします。
おそらくA~Dを安定した速度で解けたことで、Fを考える時間を取ることができたのが勝因です。
次のABC313です。この回は、「第四回日本最強プログラマー学生選手権-予選-」であり、予選仕様ということでかなり難しい問題セットでした。
ABCとしては前代未聞の100-300-400-550-600-625-625-650という鬼畜配点。解ければ高いパフォを狙えるけれども、少し詰まるだけで一気にレートを削る可能性のある危険なコンテストとなりました。
かなりの高さの壁が発生しました。
ZOIはA~Cをかなりの爆速でAC。D問題は難しく、かつインタラクティブ問題であり、ジャッジを自作するのも簡単でないという問題でしたが、ルーズリーフとシャープペンシルで実験しまくった結果、なんとかAC。
レートは1152から1191まで上がり、入水リーチとなりました。
入水か逆戻りかの運命の分かれ道、ABC314です。
314ということもあり、円周率に関する問題が出るのでは? と予想されていました。Aでちょっとだけ出ましたね。
Aを開く。substrの使い方はよく知らないのでrepでがんばりました。
Bを開く。なんかぐちゃぐちゃ管理すればできました。
Cを開く。色ごとにdequeで管理することで高速にrotateできました。
Dを開く。Queryです。Query系の問題はどちらかというと得意です。t=2,3のような破壊的なクエリが来る場合、まともに処理しなくて良い場合が多いです。大文字・小文字を「今のデフォルト」「デフォルトでないもの」に分けて管理し、ACです。
Eを開く。...わかりません。期待値DPかと思いましたが、「高橋くんが最適に行動する」の意味がわかりません。最適って何。
椅子を温めながら順位表を見ます。Dは全員解けている。Eはみんな解けていない。Eは解けそうにないので、あとはperfを天に任せるしか無いです。
そのときのDiffはこれです。
313以上に巨大な壁でした。
その時の結果がこれです。
70分間椅子を温めていたため不安でしたが、A~Dが早かったため耐えました。
1191→1212。入水です。
入緑以後にやったこと
見ての通り、あまり精進はできていません。基本コンテストとその復習、といっても解けなかった問題を見て「うおおお〜それで解けるのか...」と叫ぶなどです。
QiitaでABCの解説記事を書いてみる、というのも一瞬やってみました。1週間で完成せず溜まり始めたのでやめましたが...
あと、解説が知識不足で読めない問題については、snukeさんのAtCoder公式生放送が最もわかりやすいです。
現時点での知識
実のところ、入緑時点からそんなに増えていないのです...悲しい...
頑張って列挙するとすれば、
- 耳DP / chokudai DP
- セグ木(コンテストで使ったことはないけど)
- 超頂点
- ダイクストラ(これもコンテストで使ったことはない)
- 木の直径
あたりになるのかな、と思います。
環境
あいも変わらずNeoVimとg++です。
プラグインもほぼ変わらずですね。JetpackをLazy.nvimに、icebergをnerdfoxに、FernをNvimTreeにしましたが、競プロへの影響はほぼないです...
あと、ルーズリーフ+シャープペンシルは最強です。
テンプレ
いろんなところからパクリにパクリを重ねて作っています。#define int ll、repマクロやallマクロのほかには、cinやcoutにvectorなどを対応させてみたり、.firstを.firにしたり、といった感じです。
ここにありますが、うまく動く保証はどこにもないです...
これから
次の目標は一応入青かな...とは思っていますが、多分受験に間に合わないのでゆっくり進めていきます。
パソコン甲子園2023には、学校の高一の子と一緒に出るつもりです。本選には行ける気がしませんけどね。
最後に
とりあえず高校の間に、というかギリギリ17歳の間に入水できたのでほっとしています。参考になるような内容は何も書けませんでしたが...
Twitterの競プロ界隈も、知っているアイコンが多くなってきました。多分今年の秋辺りには受験のため失踪すると思いますが、その後も是非一緒に競プロを楽しんでいきましょう!