【AtCoder】緑色になりました。

この前のABC148で緑色になったのでメモを残しておこうと思います。

f:id:takahero2016:20191225024423p:plain

~茶色

AtCoderのアカウント自体を作ったのは、今年の4月とかなんですが、コンテストには全く出ず、C++初心者向け教材APG4bを少しだけやっただけです。9月末からPythonの勉強をかねて少しずつやるようになりました。

11/9の第二回全国統一プログラミング王決定戦予選で茶色になりました。AtCoder ProblemsによるとこのときのAC countは219でした。

やったこと:AtCoder過去問埋め(主にA,B問題とC問題のdifficultyが低めのもの)

 

~緑色

AtCoder Problemsによると12/22時点でのAC countは335でした。

やったこと:AtCoder過去問埋め(主にC問題のdifficultyが高めのもの)、螺旋本を少し進める(再帰関数くらいまで?)

 

意識したこと

解説を見ない

「このアルゴリズムを知ってないと解けない問題」みたいなのはまだあまり出てなさそうなので、なるべく解説ACをしないようにしました。

自分のメモだと過去問埋めで解説を使ったのは以下の問題(らしい)です。

- ABC045B

- ABC054B

- ABC078C

- ABC099C

- ABC110C

コンテスト外で解いた他の約300問は自力ACしている「らしい」です。(解法ではなくモジュールや組み込み関数を調べたことは数知れず…ですが…)

この習慣はもうそろそろやめると思います。(アルゴリズムが改善できないと一生解けない問題が出てくると思うので)

 

応用ができそうなことはメモしておく

普段の考察も含めて基本的にiPadを使っているのですが、考察用のノートとは別に、重要な知見をメモしておくノートも作っています。

 

f:id:takahero2016:20191225033335j:plain

こんな感じです。(多分そのうちペンで書くのはやめて、コードをどこかにまとめておくようになると思いますが…)

 

Current Streak記録を維持する

自分は結構一度流れが切れるとずっと放置しがちなので、AtCoder ProblemsのCurrent Streak表示機能で毎日1ACを欠かさないようにしています。

記事投稿時には73日連続になっていて、割と続いてます。意外に毎日何かしらのプログラムを書くのは効果があります。48時間以内に1回はプログラムを書いているということになるので、基本の部分は定着しやすい気がします。

 

使ったモジュールや組み込み関数やアルゴリズムなど

モジュール

- math(三角関数)

- copy(多次元リストのコピー)

- collections.Counter(要素の個数カウント)

- collections.deque(キュー)

- bisect(二分探索)

- fractions(最大公約数)

- itertools(直積・順列・組合せ)

- enumerate(リストのインデックスを使ったforループ)

組み込み関数

- join()(リストの要素を連結)

- sort(), sorted()(リストのソート)

- sum(), max(), min(), len()など

- map()(まとめて型変換するなど)

- range()(ループまたは逆順ループ)

※リストforループは要素の書き換えができないのでインデックスを指定したほうが良い場合は多々ある

- append(), pop()(リストに要素追加など)

- round()(四捨五入)

- find()(なんか知らんけどめちゃくちゃ速い)

- bin()(進数変換)

- 簡単なlambda式

- 内包表記

- 三項演算子

アルゴリズムっぽい何か

- 全探索

- 最大公約数、最小公倍数

- n進数に変換するやつ

- 簡単な累積和

- 二分探索

- bit全探索

- 二項係数の素数逆元mod

- 再帰関数

- xor関係ちょっとだけ

 

なんか実は名前を知らずに使ってるアルゴリズムとか考え方とかあるのかもしれないのですがとりあえずこんな感じで…

 

以上、こんな感じです。水色になるまでにはかなり時間がかかると思いますが、引き続き自分のペースで頑張っていこうと思います。自分の記録用として書いている側面もかなり大きいので、読みにくかったらすみません。(そもそもこんな記事、読む人いるんかな…)

 そういえば、今日はクリスマスですね*1

*1:こんな記事を書いている時点でお察し