AtCoder黄色になった

注: この記事のPythonはPyPyを含む

黄色になった

年が変わる前に黄色になりたい → 無理だわ。AtCoder始めて1年経つ前に黄色になりたい → 無理だったわ。何が何でも黄色になりたい → なったわ。

f:id:nagiss:20190629162236p:plain

黄色になるまでにやったこと

精進

f:id:nagiss:20190629144615p:plain

C++はunratedだった平成ABCでしか使ってない

f:id:nagiss:20190629144745p:plain

f:id:nagiss:20190629144808p:plain

初見で解けなかった問題はACしないようにしてる(これは多分良くないが)ので少なめに出てると思う

知識

やった

青のときとの差分で(青のときの記事は今見ると微妙なので貼らないけど)

  • 動的計画法(DP)
  • Binary Indexed Tree(BIT)
  • 転倒数
  • セグメント木
  • トポロジカルソート
  • クラスカル
  • 二分探索
  • 木の直径

やったけど使えてない

  • 最大流
  • スライド最小値
  • AVL木
  • 高速ゼータ変換・高速メビウス変換
  • 三分探索
  • 最長回文
  • 中国剰余定理
  • Grundy
  • 最長増加部分列(LIS)

やってない

  • 最小費用流
  • 遅延評価セグメント木
  • プリム法
  • Rolling Hash
  • Trie木
  • Suffix Array
  • 行列(ABCで出たけど)
  • 高速フーリエ変換FFT
  • kD木
  • 幾何
  • 永続データ構造

ポエム(Python競プロについて)

賛否両論ありそう

Pythonの実行速度

AtCoderにはPyPyがあるので、その辺のスクリプト言語とは話が違う
このおかげで、保証されていないとはいえ、実際のところratedなコンテストではPythonで通せない問題は0に近い(黄coderが解かないような高難易度の問題は知らないが)

まあ定数倍で厳しい気持ちになることもあるけど、他の人の提出を見ると「頭悪い実装してた…」ってなるので…

Pythonもだいたいこれ

Pythonの利点

配列Aをもとのindexを保持したままソートしたい
C++の場合は

V<pair<ll, ll>> B;
rep(i, A.size()) B.emplace_back(A[i], i);
sort(B.begin(), B.end());

普通だな!

pythonなら

B = sorted(zip(A, range(len(A))))

楽~~~~~~~神~~~~~~~~~(実行速度を気にするならB = sorted(enumerate(A), key=itemgetter(1))としたほうがいいかもしれない)

コードが短く書けると間違いにくく・速く実装できるし、デバッグもしやすくなって、
これはかなり大きな利点だと思う

あとitertoolsのおかげで再帰を書く機会が大きく減るのが嬉しい
再帰は天才過ぎて頭がバグるのでitertoolsがあると天才を無駄遣いしなくて良くなる

itertools知る前は自力で書いてたので許して

結局Python競プロってどうなの

2019年6月現在Pythonで橙以上が存在しないので、Pythonが過小評価されている印象がある
これのせいで黄色が限界とかいう説まであるが、Pythonで黄色の人がC++使い始めたら途端に赤になるなんてことは有り得ない

少なくともAtCoderにおいては、自分はPythonの実行速度で悩むより頭の回転速度で悩むことがずっと多い
Pythonは実装が簡単に済むので余計なことに頭のリソースを割かずに済み、このレート帯ではC++に比べて不利ということはないと思う(似たことは他の人にも言及されている: titiaのノート: AtCoderで青になるまで

頭の回転が速い人ならPythonでももっと上の色に十分到達できるはず

(どちらかというとPython競プロを長い期間続けている人が少ないことが原因な気がする)

Python競プロはまだ発展途上だと思っている
去年の段階ではPythonサブウエポン無しで黄色の人は3人程度(iehnさん、yaketake08さん、ukikagiさん)しかいなかったが、半年で4人増えた(hoxoshさん、ikatakosさん、maspyさん、自分)

f:id:nagiss:20190629153942p:plain

http://atcoder-circles.com/circles/pythonista

Python橙coderが出るのも時間の問題だと思う

まとめ

Pythonで黄色になると色違いボルケニオンをゲットできます