Python奮闘記

主にPythonのことを書くつもりだったけど、プログラミング周り全般の備忘録ということにした。大体競プロ。

AtCoder黄色になりました

5/3のABCで黄色になりました!

 

f:id:wattaihei1234:20200504105333p:plain

 

まだもうちょいかかるかな〜と思ってたのですが、サクサク上がってしまって自分でも驚いてます...

適当にやったこと、思ったことを書きます。適当です。

 

 

 

精進について

 

f:id:wattaihei1234:20200504111839p:plain

f:id:wattaihei1234:20200504111858p:plain

 

 水〜青初期までは青Difを毎日一問解くということをやっていました。青になってからはしばらくは黄Difでも同じことを続けていましたが、なんか気が抜けてしまって、うっかりしてたらStreakを切ってしまいました(は?)。

 Streakが切れてからはAtCoderはほとんど触ってないです。代わりに、Codeforcesのvirtual contestをほぼ1日1回のペースでやってます。これは結構効果的だったと思っています。バイトなどで疲れた日でも、とりあえず[Registration for virtual participation]のボタンを押して解き始めれば、(最初の方の問題は簡単なので)勝手に競プロモードになれます。

 2時間終わって解けなかったものは解説見てました。ちょっと抵抗あったんですが、まあCodeforcesだし。それに時間内に解けないということは本番のコンテスト中にも解けないでしょうから...大抵しょうもないミスであることが判明するんですが

 

 

 

アルゴリズムについて

 正直、青になってから新しく学んだアルゴリズムってほとんどないです。一応アリ本には一通り目を通しましたが、使ってない知識はたくさんあります。これはABCの理念(たぶん)が知識より思考力を重視してるからだと思います。ABCに出るだけなら、フローとか知らなくてもそんなに困らないし。ちなみに自分はセグ木すら書いたことないです...(BITでなんとかなった)

 持ってるライブラリだけ紹介しておきます。

  •  BIT ... ARCとかでは出番多かった印象。座標圧縮+BIT上二分探索でstd::setの代用みたいなものも用意してました。
  • セグ木 ... 一回TLEしてから触ってない
  • UnionFind ... はい
  • SparseTable ... Codeforcesやってたら欲しくなった。
  • 桁DP ... ソラで書くの厳しい
  • 最大二部マッチング ... 使ったことなし
  • 幾何 ... ABC-Fで幾何が流行ったときに作った
  • ダイクストラ ... よく使うので。たぶんソラで書けるけど一応。
  • LCA ... ずっとダブリングにしてたけど、最近EulerTour + SparseTable に切り替えました
  • エラトステネスの篩、素因数分解 ... はい
  • RollingHash ... 文字列問題ではときどき出番があった
  • Z-Algorithm ... 出たから作ったけど出番が。

 

うーん、こうしてみるとあんまり整備しきれてないですね。

 

 

 

黄色になれた要因

 上をみると限界精進してる訳でもないし知識がある訳でもないしなんだこいつって思いますよね。私もそう思います。

 じゃあ自分に何の強みがあるかと考えると、「苦手分野を減らした」って点が大きいかなと思います。レートが上がると天狗になりがちですが、たまたま自分の得意な分野だったとか、直近に類題を解いてたとかで上がっただけってことは十分あります。それで次に苦手分野が出て解けない...となってはもったいないです。出てきた問題に1つ1つ謙虚に向き合うのが良いです。

 あと青になってから意識し始めたこととして、「数式に落とす」ということがあります。頭が整理できないときこそなんとか数式に片付けられないかと考えるようになりました。数え上げとかは特にこれかなと思います。

 

 

 

Pythonで競プロをやることについて

 twitterで目にするプロフィールにPythonと書く人も増えてきて、もう一大勢力と言っていいくらいなのではないかと思います。

 C++と比較して実行速度が遅いという点からちょっと煙たがられることもあるようです。でもちゃんとメリットはあると思っていて、

  • コーディング量が少ない
  • long long とか気にしなくていい

など。言語アップデートも来たし、もはや「Pythonだから〜」とか言ってられないくらい強い言語になってるんじゃないかというのが個人的な感想です。

 そもそも実行速度が厳しくて解けない、というケースは(AtCoderでは)あんまり遭遇したことないです。AtCoder側もPythonを蔑ろにしないような努力をされてると感じますし、大抵は自分の思考が足りないかおかしな実装をしてるという場合がほとんどです。謙虚にいきましょう。

 

 

 

メンタル的な話

 当然なのですが、レートが上がれば嬉しいしレートが下がれば悲しいです。でもあまりレートにこだわりすぎるのはよくないな、と最近気付きました。実力がつけば自ずとレートは上がるのですから。「レートを上げる」というよりは、「自分の適性にレートを収束させる」くらいの気持ちでいようと心がけました。ここは強気なんかい

  この「自分の適性」を上に設定すると行動がちょっとずつ変わると思います。「自分は本来黄色だからこれくらいの問題は瞬殺できるはず」「難しそうだけど黄色の実力あるし解けるだろう」などと。一種の自己暗示みたいですね。。

 

 

 

 

 

達成した感想と今後について

 いやあ、嬉しいです。一年前HelloWorldしてたころを思うと、すごく登ってきたなーと感無量です。始めたときは水色は頑張ればなれそうで青はワンチャン?くらいに思っていて、黄色とか雲の上の存在でした。人間やればできるんだなあ。ABCも卒業したし、もうビギナー卒業と言ってもいいのでは?

 この上は橙ですか。でもratedの回数が激減するので、これまでの色変とは難易度が明確に違うと思っています。橙からは本当に天才しかなれない領域だなーというのが今の印象です。それにほぼABC速解きだけで手に入れたレートなので、ARC,AGCで戦える気がしない...

 今後競プロ以外にも力を入れていきたいので、競プロはまあコンテストには出るかーくらいの心持ちでいようと思います。(こう言っとかないと気付いたら競プロやってるしヤバイ)

 

 

 

 

以上です。