AtCoderで水色になるまで

f:id:andoreiji11:20190908115647p:plain



AtCoderで水色になるまで

・大体水色になるために必要なことは語り尽くされているようです。表題でぐぐって上の方に出てくるブログの内容を読めばだいたい僕の言いたいことも書いてあります。ここでは「水色になるまで」の簡単な軌跡とか有名書へのコメントを付すことにします。

【コンテスト】
・自分は今年の4月ごろから本格的にコンテストに出始めました。
・最初期はC言語でやってたんですが,一瞬だけpythonにゆらぎかけて直ぐにC++に移りました。”C++使い”を名乗るのは流石におこがましいのでしませんが,基本的にはC++でやるのがいいと思います。
・といいつつ実は昨年秋ぐらいから過去問はちまちま解いてました(Cで)。当時配列の動的確保なんてものもソートも知らなかったので100,200点は流石にすぐ解けましたが300点が解けるかは問題によりけりという感じでした。

C++習得後は300点は直ぐに解けるようになっていたので,5月頃には既にABCで水パフォが出せるようにはなっていました。
・というか,実際この時期からパフォーマンスの平均は殆ど変わっていないので,「精進」の成果が出たのか本当に怪しい。単にパフォ収束を待っただけではないか?という疑問がとうとう消えずにここまで来てしまった。

・6月,ちょうど令和になってABCが6問体制になる頃2回連続でコンテストがunratedになるという事件があったことを当時コンテストに出ていた人はよく覚えていると思います。あの頃は本当に落ち着きがなくて100点問題で10回近くWAを出したり200点問題がついにAC出来なかったとか緑としても流石に”ヤバい”振る舞いを本気でやっていた。あの頃の提出表は今眺めても酷い。
・この時期の教訓として,「問題文はちゃんと読む」「簡単な問題でもコーナーケースは意識する」等の当たり前のことを当たり前にやる重要性を痛感しました。この時期はレートがガッツリ下がったコンテストもあり結構落ち込んで水色になるのも無理なのではないか競プロに深入りするのはやめたほうが良いのではないかと思っていました。まあ実際辞める勇気も持てなかったわけですが

・7月に入る頃に初めてABCで5完をして青パフォを出すことが出来て,ようやく水色が見えてきたかなという実感が湧いてきました。8月に入ってからは緩やかにレートを伸ばし続け,9月7日のABC140で入水を決めることが出来ました

・令和のABCは実際厳しいと思います。特にABC/ARC同時開催のコンテストはABC側のDが500とか600とかでそもそも殆ど解ける人がおらず3完で青パフォも出たのですが(僕がこの形式のコンテストに出たのは1回だけですが実際3完で青パフォが出ました。後にも青パフォは令和ABCで1回しか出していない...),おそらく今だと緑レートを目指すにもたまには400が解けるようにならないと厳しいように見えます。「300安定で緑,400安定で水,500安定で青,600安定で黄」というのは多分見当違いでは無いと思いますが緑に関しては300安定だときつそう。400点は確かにだいぶ令和ABCで易しくなりましたが時々難しめのも出てくるので実際コンテスト中のAC率はまだ100%にはなってないですね..

【蟻本】
・買いました。多分これがプログラミング関連で一番読んだ本です。これからも読むでしょう。
・蟻本の記述は簡潔ない反面初学だとわかりにくい部分があるかもしれません。蟻本のコードも同様に簡潔でしかもC++のごく基本的な機能だけで書かれているため技術的に躓くことは少ない(逆に言えば蟻本のコードで技術的にわからない部分があるならそれは直ぐに調べるべきです)でしょう。
・しかし”何をやっているのか”を読み取るのはそもそもアルゴリズムに対する日本語の説明がわからないと厳しい。自分は蟻本のコードをエディタに写経して一行一行にコメントをつけてなんとか意図を読みとろうと頑張ることを繰り返しました。とはいえ正直,それによってアルゴリズムへの理解が劇的に深まったわけではないので,やはり本人の理解力とかによる部分が大きそう...という気がします。
・あと蟻本のDPの記述は難しいと思います(ナップザックDPから入るのは自然だと思いますがなんというか,いきなり最適化が高度)。とはいえ自分もDPは蟻本で読んで学んだので苦しくてもあれを読むしか無いのか...。

・特に令和ABCになってから思うこととして蟻本は初級中級上級編に分かれていますが,章立ては気にせず読めるところ,精進中にぶち当たったアルゴリズムをランダムアクセスして読んでいくのが良いと思います。上級編の文字列とか,数学パートは全部読みました。逆に中級編のフローは流石に水色には要らなさそう

【螺旋本】
・多分蟻本に比べると初学者向けという感じで書かれているとは思うのですが,コードが読みにくい。日本語の説明は多分蟻本より丁寧だとは思います。どちらかと言うと古典的なアルゴリズムとデータ構造の基本書という感じです。(余談ですが情報系の1年生2年生は持っておくと大学のプログラミングの試験とかで結構役に立ちます。”そういう感じの”教科書みたいな本だと思うと良いです。だって,別に競プロにおいて”クイックソート”を自分で書けるようになる必要は多分無いでしょう)

 

 

アルゴリズム・データ構造】
あくまで水色になるのに必要なものを簡単に列挙します,これは本当に他のブログとか探したほうが良いと思いますが
・累積和:必要
・ソート:必要
・尺取法:必要
・DFS,BFS:必要。これは蟻本のDFS/BFSの章をマスターするのが最適だと思う
・二分探索:lower_bound,upper_boundとか使って生の”探索”をする技術は必要,単調増加列のうち次の条件を満たす最小の要素を求めよ,という類の問題で値を二分探索で絞っていくみたいな技術も知っておくと良さそう
・グラフの扱い:DFS,BFSは必須。最短経路を求めるダイクストラ,ベルマンフォード,ワーシャルフロイドも必要。流石にフローとかはABCじゃ出ないでしょう(自分も良くわかってない)
・UnionFind:必要
・DP:旧ABC-Dにある程度のDPは書けるようになるべきなんだろうなぁと思いつつ自分も正直怪しい
・数学:蟻本に書いてある数学についての記述は全て必要だと思います。

【精進】
・あまり精進ペースは良くないです。
・1日多くて2,3問,600↑の高得点問題だと解説読んだ上で一日かかっても解けないとかがざらです。鶏と卵なのかもしれませんが,精進ペースが早い人が強くなる,強い人は速いペースで精進が出来る...ということな気がします。

・よく言われる「強い人のコードを読む」という勉強は全然できていないです。コード読解力が全然なくて他人のコードを読んでも何をやっているのかが全然追いきれないのでこれを何とかしないと上には行けないのかなぁ

・コードをもう少しきれいに書きたいです。僕のコードは思考過程がぐちゃぐちゃに表現されていて、たぶん「何でこれで通るんだろう」というコードのオンパレードになっているでしょう。
・「精進」というものを自分が出来ているのかという問題には青レートになることでしか答えられないように思えるので青レートになりたいです。もちろん究極には自由色になって名前をちゃんと”サクラ”色にしたいんですが...

・以上駄文失礼しました。何かの参考になれば嬉しいです。よければツイッター(@andoreiji11)もフォローしてみてください。

響け!ユーフォニアム
・観ましょう。

サクラノ詩
・ぜひプレイしましょう。

【サクラノ刻】

・いつ出るんですか!?