この記事は新歓ブログリレー2022 16日目の記事です。
はじめに
こんにちはAlgorithm班所属のebiです。2022年2月5日のABC238でAtCoder黄色になりました。せっかくなので色変記事を書こうと思います。サンプル数1なので参考程度に。
競技プログラミング(以下 競プロ)/AtCoderについて知りたい方はこの記事を読むといいと思います。
生い立ち
現在(2022/03/24)大学3年で工学院情報通信系というところに所属しています。地元の公立小学校、公立中学校、公立高校出身です。実は競技科学をしていましたみたいな競プロの素地があったとかはないです。パソコンもあまり触ったことがなく大学に入学してから競プロを始めました。
競プロを始めてから
競プロを始めてから黄色になるまでを時系列順に書きます。
灰色(2019/05/19 ~ 2019/09/15)
友人の誘いで始めました。最初のコンテストはCEを出して終了していました(はい?)。
APG4bというAtCoderが提供しているC++入門をやりました。C++が難しくてまじで書けるようにならなかったのでPythonでコンテストに出るようになりました。そうすると茶パフォが出るようになり無事茶コーダーになりました。
茶色(2019/09/15 ~ 2019/12/28)
この時期くらいにTwitterアカウントを作った気がします。別にTwitterはあってもなくてもいい気がしますが、気軽に相談できる人がいるとよいと思います(traPとかいいんじゃないんですかね)。
暇なときに問題を解くみたいなことをしていたら緑色になりました。
緑色(2019/12/28 ~ 2020/05/10)
traPのAlgorithm班がABC解説会というものを始めたので顔を出しました。初めて競プロerにあったのもこの時だと思います。まだ某流行り病もなく対面での解説会でモチベが上がった記憶があります。
この時期にPythonからC++に移行しました。理由は解説会で会った人が大体C++を使っていてその人のコードを読みたいからみたいな感じだった気がします。言語選択はゲームでいうキャラ選択なので好きなものを選べばいいと思います。
アルゴリズムに興味が出てきたのもこの時期でプログラミングコンテストチャレンジブック(通称:蟻本)を買って初級編と中級編の一部を読みました。
某流行り病が出るぎりぎりくらいにKUPCというコンテストが開催されてtraP所属の@aya_seと一緒に出ました。チームで問題を解くというのをやったことがなかったので楽しかったです。
某流行り病が勢力を拡大してきてからはdiscordで駄弁りながら問題を解く、コンテスト後に雑談をするみたいな生活をしていました。
水色(2020/05/10 ~ 2020/12/19)
バチャをやったりICPCの国内予選に参加したりしていました。ほとんど記憶がなくて思い出せません。
某流行り病のせいでオンサイトイベントが軒並みなくなってモチベを保つのが厳しかったですがコンテストは出続けていました。
青色(2020/12/19 ~ 2022/02/05)
この時期が一番長いです。ICPC国内予選で予選落ちしたりレートがまったく上がらずつらい気持ちになっていました。
何が実力向上の要因になったかわからないのでやっていたことを列挙します。
ライブラリ作成
データ構造が好きになり色々なデータ構造やアルゴリズムを書くことにはまっていました。ライブラリ作成を通してC++に関する知識がかなり増えたと思っています。
AOJ-ICPC埋め
ICPC国内予選に参加するにあたってICPCの過去問を解いていました。ICPCにはサイコロを動かす問題や幾何、構文解析などのAtCoderではあまり見ない実装が重い問題がでるのでつらい気持ちになりながらコードを書く体力がついたと思っています。例としてこの問題をあげます。見た目から嫌な気持ちにしてくる問題です。
JOI埋め
当時DPが苦手だったのでDPが良く出ると噂(??)のJOIを埋めることにしました。今ではDPは得意な部類になったのでやってよかったと思います。
コンテストへの参加
コンテストに出ないことにはレートは上がらないのでコンテストに出ましょう。どうせレートは実力に収束する(??)ので四の五の言わずに出ましょう。
少女☆歌劇レヴュースタァライトを見る
このアニメから舞台少女として舞台に立つということを学びました。私は天堂真矢が好きです。
にじさんじを見る
にじさんじはいいぞ。私は特に笹木咲、月ノ美兎、リゼ・ヘルエスタ、アンジュ・カトリーナ、ニュイ・ソシエール、花畑チャイカが好きです。
にじさんじ以外のVだとholoEN、ぶいすぽっ!を見ています。
精進記録
2022/03/19現在の情報です。
これから
競プロerとしての目標はICPC国内予選突破と橙色達成です。どちらも険しい道ですが気長に頑張ろうと思います。
質疑応答
traP内で質問を募集したのでそれに答えていきます。解答は完全に私見なので参考程度に。
黄色になって変わったことはありますか (彼女ができた・ABCへのモチベが 上がった/下がった・宝くじがあたった・世界が黄色く見える 的な)
3か月給湯器なし銭湯通いをしていたんですが遂に給湯器が届きました。そしてAtCoderのユーザー名が黄色になりました。彼女はいません。
思う最強のデータ構造は?
最強が何に対するものかわからないですが今までで一番実装が大変だったのはfibonacci heapです。いろんな人に助けられながら書きました。
現時点で 実装(ライブラリ、言語仕様の知識、タイプ速度?) と 考察(典型への理解、天才解法) はどのくらいの割合で重要だと思う?
AtCoderに関しては 実装3考察7くらいだと思ってます。理由は、体感ですがAtCoderで解法はわかるけど実装でお手上げみたいなケースが少ないからです。ACするためにはまず実装するための解法を考えねばならず、そこで典型への理解度・解像度、問題特有の性質を見抜く知識やセンスがとても重要だと思います。それに加えてよい実装をするためには、言語知識というよりも実装方針や細部を考えるための考察力が重要だと思います。
典型への理解度をあげるためにライブラリを書いたり実際に自分の手で実装することは良い練習になると思います。
これは余談ですが、自分は結構実装が好きでいろんな人のコードを読みます。強い人はコードもすっきりしていたり賢いな~みたいなのが多いのでぜひ読んでみてください。
問題を解くときや解けなかった問題の解説を読むときに気をつけている、意識していることはありますか?
問題を解くときは典型に当てはめよう!みたいなのよりは問題特有の性質を考えることを意識しています。
解けなかった問題はコンテスト後だとすぐ解説見てます。精進中だと1時間くらい考えても何もできないみたいなときは見てます。解説もただACするだけじゃなくどのような性質があったからこう解けるのかみたいなのを意識して復習してます。
次に競プロ用に触ってみたい言語とかある?
Rustを触っています。コンテストをRustで出るつもりはないんですがライブラリを書いたりして遊んでいます。
競プロに飽きてきた?
本音はちょっと飽きてきました。ICPCやGCJがあるってのと競プロerとの交流が楽しいからやってます。
競プロやってて良かったトークある?
競プロ自体が楽しいのでやってて人生が楽しくなりました。打ち込める趣味ができたのはうれしいです。
テンプレのムーブあれば教えて
「前から解いていく => 詰まったら順位表見て逆転してたり得意が似ている/違う人のムーブを見て後ろ行くかどうか決める」はよくやってます。
問題の考察に関しては「入力例で遊ぶ => 良い性質がある or よく見る形をしているか考える 」をよくやっています。
競技中の計算とかの思考、何使ってやってる(iPad, 紙, よく参考にする・使うサイト/ツールとか)?
iPadをノート替わりに使っています。
よく参考にするというか読んでいるサイトはmaspyさんのブログです。自分の持っていない視点で書かれているのではえ~って言いながら読んでいます。
おわりに
自己語り記事を読んでくれてありがとうございます。競プロを始めたくらいの時期はここまでこれるとは思ってもいなかったですが達成できてうれしいです。
明日は@Tennessine_699さんと@yukikurageさんです。お楽しみに!