茶色コーダーになるには。(体験談)

この記事は、<a href = "https://adventar.org/calendars/5332" target="_blank">大阪工業大学 Advent Calendar 2020</a>の8日目の記事です。
あくまで体験談(ココ重要)です

<h1>1.はじめに</h1>
senarice(著者の競プロname)は、2020/6/21に茶色コーダになりました。今もマイペースに頑張っています。今回はちょっと調子にのって色変記事を書いてみました。

![スクリーンショット 2020-12-04 122559.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/913726/7e5b4da1-af09-25a0-a643-24326425df97.png)

<h1>2.競技中にやってはいけないこと</h1>

<h3>その1　お酒を飲みながらやる</h3>
競プロはたまに「パチンコ」と言われます・・・。「ギャンブル×酒」はろくなことになりません。

<h3>その2　途中であきらめる</h3>
A問題やB問題でWAを連発してしまう時があるかもしれません。ですが、その時は心を切り替えてレートをなるべく下げない方向性に切り替え、できるとこまで足掻きましょう。(たまに、ほんのちょっぴりレートが上がったりもする)

<h3>その3　検索するのを拒む</h3>
問題で「ここどうやってやるんだっけ・・・」と思ったら躊躇せずすぐにググりましょう。

<h1>3.茶色になるために求められること</h1>
<h3>その1　AB問題の早解き</h3>
これができないと正直厳しいです。これは、過去問をやりこむしかないと私は考えます。ABCのB問題は全部埋める勢いで精進しましょう。実際私自身、B問題をやりこむことでABの早解きができるようになったと自負しています。また、まれに昔のB問題が少し形を変えて出題されることがあります。

・<a href= "https://atcoder.jp/contests/abc030/tasks/abc030_b" target="_blank">Atcoder Beginner Contest 030 B-時計版

・<a href= "https://atcoder.jp/contests/abc168/tasks/abc168_c" target="_blank">Atcoder Beginner Contest 168 C- : (Colon)

見てわかると思いますが前者(B問題)が解けば後者(C問題)も解けそうですね。

<h3>その2 アルゴリズム</h3>
最近のAtcoderでは、優しめのアルゴリズムだと普通に難易度は灰色になります。(厳しい)
これから書くアルゴリズムは茶色コーダーを目指すなら知っていてほしいと考えるものを列挙しています。自分で調べてメモ帳等に保存しておきましょう。(ただ単にメモするだけじゃなく、返り値の形といったプログラムの内容をある程度理解することをお勧めします)
<h5>最大公約数,最小公倍数</h5>
出現率はやや高めな気がします。(以下は例題)<br>
・<a href= "https://atcoder.jp/contests/arc110/tasks/arc110_a" target="_blank">鹿島建設プログラミングコンテスト2020（AtCoder Regular Contest 110）A - Redundant Redundancy</a>

<h5>約数列挙</h5>
約　数　を　列　挙　し　ま　す

・<a href= "https://atcoder.jp/contests/abc180/tasks/abc180_c" target="_blank">AtCoder Beginner Contest 180 C - Cream puff

<h5>素因数分解</h5>
約数の数を数えたりするのと色々使えます。
(例題は難しめです)

・<a href= "https://atcoder.jp/contests/abc169/tasks/abc169_d" target="_blank">AtCoder Beginner Contest 169 D - Div Game

<h5>全探索</h5>
愚直な全探索です。これを見抜けるセンスを磨くと後々楽だと思います。

・<a href= "https://atcoder.jp/contests/abc175/tasks/abc175_b" target="_blank">AtCoder Beginner Contest 175 B - Making Triangle

・<a href= "https://atcoder.jp/contests/abc170/tasks/abc170_b" target="_blank">AtCoder Beginner Contest 170 B - Crane and Turtle

<h5>bit全探索</h5>
bitを用いて全探索します。習うより慣れろだと思います。
個人的なイメージではn個からm個(n>=m)選ぶときに多用するイメージです。

・<a href= "https://atcoder.jp/contests/abc182/tasks/abc182_c" target="_blank">AtCoder Beginner Contest 182 C - To 3

・<a href= "https://atcoder.jp/contests/abc167/tasks/abc167_c" target="_blank">AtCoder Beginner Contest 167 C - Skill Up</a>
(やや難)


・<a href= "https://atcoder.jp/contests/abc173/tasks/abc173_c" target="_blank">AtCoder Beginner Contest 173 C - H and V</a>
(やや難)

<h5>next-permutation</h5>
配列の順列を生成します。難しいことを言っているように見えますが、やっていることはすごく単純なので必ず理解できると思います。(内容は割愛。各自調べてください)
コンテストでは忘れたころに出てきます。

・<a href= "https://atcoder.jp/contests/abc183/tasks/abc183_c" target="_blank">AtCoder Beginner Contest 183 C - Travel</a>

<h5>Union-find</h5>
名前が頭よさそうですが、中身はそこまで難しくないです。(むしろ簡単?)
グラフをかじってるとかなり理解しやすいです。(内容はカット)

・<a href= "https://atcoder.jp/contests/abc183/tasks/abc183_c" target="_blank">ACL Beginner Contest C - Connect Cities</a>

・<a href= "https://atcoder.jp/contests/abc177/tasks/abc177_d" target="_blank">AtCoder Beginner Contest 177 D - Friends</a>
(やや難)

<h5>imos法・累積和</h5>
内容は各自で。これも全然複雑ではないです。
個人的には計算量を減らす際に用いることが多いイメージです。

・<a href= "https://atcoder.jp/contests/abc183/tasks/abc183_d" target="_blank">AtCoder Beginner Contest 183 D - Water Heater</a>

<h3>3.さいごに</h3>
筆者も初めの方は全然できませんでした。(for文を理解するのに1時間くらい、配列の添え字を理解するのにも1時間くらいかかった気がします・・・)
また、競プロのモチベを失い三ヶ月くらいしなかった時もあります。ですが、精進等を重ねるうちに少しずつできるようになりました。なので茶色コーダは努力で何とかなると思います。