この記事はHiCoder Advent Calendar 2021の11日目です。自身初めての記事!!
自己紹介
・大学2年
・競プロは2年になる春休みから本格的に始めた
・野球好き
レーティング推移
やったこと
本題ですが、自分はc++の基本構文->典型アルゴリズム・典型問題->精進の順に進めました.
c++を触るのは初めてでしたが、c++基本文法を学べるAPG4bの存在、競プロの問題の解説が大体c++で書かれているなど言語を選ぶうえでこだわりがない限り1択な気がします.
1年の8月
まずc++の基本文法をやるのにAPG4bを上から順にこなしていきましたが、再帰関数で挫折して3月まで競プロから離れます。
1年の3月
競プロに復帰しますが、理由は特にありません。再帰関数をここで攻略するのですがとても苦労しました。再帰関数は例がフィボナッチ数列ではなくDFSのようなグラフだと理解しやすかったなと今思います。その後、
・深さ優先探索(DFS)
・幅優先探索(BFS)
・動的計画法(DP)(TDPCを一通りやった)
・二分探索
・全探索
・累積和
・ダイクストラ法
・ワーシャルフロイド法
・クラスカル法
を学びました。再帰関数が一番の山場で上記のアルゴリズムはあまり苦労することなく習得できました。上記のアルゴリズムは典型で何も見なくてもコードを書けるぐらい理解する必要があると思います。何も見なくても書けるようになったのは緑diffを埋める最中です。
2年の7月
ようやく精進!神サイトatcoder problemsの緑diff(問題の目安で、緑diffの問題が解けるとコンテストで緑色ぐらいのパフォーマンスがでる)の問題をひたすら解きました。そこで習得したアルゴリズムは
・セグ木(遅延セグ木)
・UnionFind木
・強連結成分分解
・トポロジカルソート
・マンハッタン距離の45°回転
・二項係数(nCk)
・n乗の高速化(mod_pow)
です。上記のアルゴリズムは自分で使えるようにテンプレートを作っていました。グラフに慣れてなかったり、数学が弱い(僕)と少し苦労するかもしれません。ただセグ木やUnionFindは楽しいぞ!
緑diffを埋める最中に緑色になりましたが、問題を解く中で典型アルゴリズム+上記のアルゴリズムがだんだん染み付いていく感覚はありました。夏休みを利用し、2か月で埋めるぞ!と思って1日4~5時間ほぼ休みなくやってた気がします。(ちゃんと2か月で埋まったので良かった)
2年の9月
水色diffを埋めていきますが、ここら辺から考察が必要な問題が大半で楽しくなっていきました。一方で、解説を読んだ時に、次同じような問題が出た時解くのは無理だなと思う問題が多かったです。緑diffと比べて実力がついてるな~という感覚は薄れていき、徐々に精進モチベを失っていきました。
青色になれるのか
結論僕はほぼ無理です。これから上に行くには精進量が必要だと言われてますが、1日4,5時間もする精進モチベは無いし時間も有限なので…
最後に
atcoderのコンテストには今後も出る予定です!精進もゆるーく続けて行くつもりです!最後まで読んでいただきありがとうございました。