見出し画像

AtCoder 入水までにやったこと 【Tier形式】

みなさんこんにちは,yokoyama です.

AtCoder から競プロに取り組み始めて2年弱,遂に入水することができました!

今回は,特に自分の成長に強く貢献したと思うものを Tier 形式で紹介したいと思います.
一意見として参考になれば幸いです.

ABC342(2024/02/24)で入水!
横軸:コンテスト参加回数(AtCoder Graph Time)

簡単な自己紹介

  • 久留米高専制御情報

  • 九州大学工学部3年次編入→そのまま進学し,現在 M1

  • コンテスト初参加は,ABC225(2021/10/30)

  • 使用言語:Python

コンテストに参加したきっかけ

プログラミングやアルゴリズムに関しては,とても苦手でした.
高専時代,プログラミングやデータ構造アルゴリズムの授業があるのですが,とにかくわからない.(ほぼ赤点 or 赤点ギリギリ回避)
また,一部の周りは,プロコン部への入部していたり,好きで授業以外でもプログラミングに触れていたりと,どんどん差をつけられていく感覚がありました.
今思えば,せっかく周りにできる人がいるのだから,その環境をうまく利用するべきだったと思います.(変なプライドと逆張りは良くなかったです)
そのため高専時代は,卒研まで,授業以外でプログラミングに触れることは一切なかったです.

自分は,苦手を意識しすぎると,苦手だから,どうせできないからとか,色々と自分を納得させるために理由を付けてしまい,やらない理由を探してしまいます.
ただ一方で,苦手を認識することは,成長において,大切だと思っています.
苦手なことというのは,とてもポジティブに考えると,大きなのびしろだからです.

そのような背景もあり,大学3年次編入後,色々と落ち着いて来たB3後期に競プロ(AtCoder)を始めました.初参加時は,A問題を解くのに50分以上かかったことを覚えています.

苦手意識があった分,とにかくまずは沢山解いて慣れるしかないと思い,緑まではひたすら問題を解いていました.

自分の成長に強く貢献したと思うもの 【Tier形式】

入水時点でのAC数は,平均よりそこそこ多い方だと思います.
(同じくらいのレートの方,他の方の入水記事,Problemsに表示されているAC数ランキングと実際のレート順位を見比べる限り)

その分色々なことにも手を出して来たので,一意見として参考になるかもしれません.以下 Tier 表です.

左右差微妙にあり

当然ですが,すべて自分の成長に強く貢献したと思うものです.
Cランクに置いているからといって,やらない方が良かったとかではありません.

以下は,それぞれに対して取り組んでみた感想です.

殿堂入り

  • ABC参加

モチベのほとんどがABCです.
ABCでレートを伸ばすために勉強しているといっても過言ではありません.それが本当に良いことなのかは,分かりません.(まぁ楽しくやれてるのでヨシ!)

毎週参加し続けるというのは,簡単なようでとても難しいことだと思います.何度かモチベを失い,やる気が出て来たら復帰して再開するを繰り返していますが,再開するたびに,継続しておけば良かったなと後悔します.

  • 議論,雑談

とてもありがたいことに周りの人に恵まれたことと多少の布教活動もあり,コンテスト後に解法について通話で議論する場があります.
また,研究室でも競プロをやっているメンバーがいるので,月曜日は競プロの話題で盛り上がります.
勉強にもなりますし,モチベーションも保てますので,とても感謝しています.

X (Twitter)でも,コンテスト後に,他の方の解法ツイートや感想を見るのはとても好きです.
特に,年齢や背景が違う様々な方が,コンテストに参加しているのを体感することができるので,モチベーション維持につながっています.
恩返しの気持ち,そして応援と感謝の気持ちをこめて,そして,自分のいいねで,誰かのモチベーション維持に少しでも貢献できたらという思いで,いいねを押しています!
冷えてしまった方にいいねを送るのは,煽りと捉えられるかもしれないので押せないという意見も分かりますが,自分は冷えたとしても,いいねをもらった方が嬉しいので,いっぱい押しています!

Sランク

  • 鉄則本+典型90

正直,すべて典型90も鉄則本の応用問題も解き尽くした訳ではないのですが,それでも力が身についています.

問題を解く中で,多分自分が知らない概念が使われていて,まだ解けないだろうなぁと思う瞬間は多いです.
練習では,この感覚も大切だと思いますが,やはり本番では,なるべく今の知識で絶対解けると思った方が,自分の限界に近い実力を発揮できると思います.
そのため,典型知識というのは,なるべく早めに手を出した方が良いと思っています.

しかし,新しい典型,つまり自分の知らない概念を学ぶのは,カロリーが高いです.
その時々で,自分が楽しめる勉強をうまく選ぶことが大切なのかもしれません.

自分がやっていたこととしては,

  • いつもより解説を見る基準を低くする

  • かつっぱさんの典型90問 Pythonでときますシリーズを見る

  • 解説ACしてしまって,類題に自力で挑戦する

  • 鉄則本の例題を読んで理解する

などです.

  • EDPC

茶色~緑前半時代とにかくDPが苦手でした.
簡単なDPだとしても,とにかく式の組み立てに時間がかかりますし,レートに対して適正難易度だとしても,DPなんだろうなぁと思うことしかできませんでした.

ただ,水色になるための戦略を考えたときに,DPを得意分野にした方が良いだろうと思いました.
理由としては,緑の問題はギリギリ解けるけど,水色はほとんど解けないという状況は,レートの伸びがとにかく悪いからです.
どこかで,水色や青色の問題を解けるような武器となる得意分野を持っておくことで,大きな上振れを狙うことができると考えています.
そのような戦略を考えたときに,DPというのは水色,青色に多いイメージがあるので,EDPCに手を出し始めました.(実際自分がコンテスト中に初めて解いた青色問題はDPの問題でした.)

ただ,DPといっても色々なDPがあるので,新しい概念のDPを学ぶのは,カロリーが高いです.
そこで,私がやっていたことは,かつっぱさんのEDPCシリーズです.
このシリーズは本当にお世話になっていて,定期的に何度も見ています.


  • 水色埋め

大半は解説ACだったと思います.
少しでも考察したことが,解説に書かれていると喜んでいました.
どちらかというと,解法の再現性みたいな部分の考察に時間をかけていました.身近の友人に,こういう問題はどうやったら思いつくの?と聞いたり,特に競プロフレンズさんの解説は,かなり思考のプロセスや抽象度が高く参考にしたりしていました.(いつも助かっています.本当にありがとうございます.)

Aランク

・緑埋め

緑問題を安定して解くことができればいつか水色になれるのだと思いますが,自分としては,緑問題を安定して解くのはかなり難しかったです.

特に,茶色に比べて,問題範囲が一気に増えた感覚がありました.
そのため,同じようなDiffでも,解ける問題と解けない問題があります.
例えば,グラフ問題の緑問題は高確率で解けますが,整数問題の緑問題は今でも微妙です.

具体的な対策も思いつかなかったので,とにかくABCの緑は全部埋めるぞという気持ちでやっていました.(試験管を除くABC緑は,あと30問くらいです.)
もし,緑も水色も全部解いてそれでも,まだ緑コーダーだったら,多分2週目3週目と解き直すつもりでした.

・AHC参加

特にこの知識が役に立った!とかではないのですが,
ABCで学んだ知識が活きる場が他にもあるだけで,モチベーション維持に大きく貢献しました.

また,解説を早く見てどんどん先に行きたくなるタイプなので,ひとつの問題を試行錯誤しながら,スコアを伸ばすという経験はとても楽しかったです.
ABCのコンテスト中にも,考察がダメなら,とにかく手を動かして実験するという習慣が身に付き,取り組み方自体に大きく影響があったと思います.

Bランク

 ・Atcoder Daily Training,バチャ

これも具体的なスキルが身についたとかではなく,モチベーション維持への貢献が大きいです.

研究室のメンバーと息抜きがてら参加すると盛り上がって楽しいですし,普段のABCでは,全完という体験をすることができないので,とても強くなったような感覚があって新鮮です.

バチャなども最近は参加できていないですが,特に緑になるまでによく参加していました.

・ARC参加

ARCに参加するかしないかに関しては,本当に意見が分かれているイメージです.もちろん正解は無く,自分のモチベーションがより保てる方を選ぶのが良いと思います.レートが大きく下がったときに,モチベを保てるかどうかは,性格やその時々のメンタル状況にもよると思います.

自分の性格としては,とにかく0完だけはモチベとメンタルが大きく削れるので(あとレートも),A問題の配点が300だと参加寄り,400だとメンタル次第,500はまず参加しない,という感じです.

ただ,問題が解けたときの嬉しさは大きいですし,やられて覚えるというのは成長のきっかけや瞬発的なモチベも大きく上がるので,Bランクに置きました.

Cランク


私は普段 Python で問題を解いているのですが,Python の実行時間が原因で解けなかった問題がたまにあります.
何度かC++に乗り換えようと思い勉強しているのですが,余りにもコーディングスピードに差があります.
(誰かが例えていましたが,「利き手じゃない方で文字を書いている感覚に近い」というのはまさにその通りだと思います.)

ただ,C++を勉強することで,解説や本,他人のコードを読みやすくなったのは非常に大きかったので,Cランクに置きました.

まとめ

ここまで読んでくださった方ありがとうございます.
すぐに緑に戻るかもしれませんが,まずは水色を安定させることを目標に頑張りたいと思います.

AtCoder関係者の皆さんおよびX(Twitter)で繋がっている皆さん,いつも励み,勉強になっています.ありがとうございます.

最後に,リアルで繋がっている友人たち,とても感謝しています,ありがとう.


この記事が気に入ったらサポートをしてみませんか?