いろいろな記録

大学院生やってます

AtCoder水色になりました

前回のABC164でAtCoder水色になりました。

あまり話せることはありませんが、入水した人の一つのサンプルとしての情報と、僕がAtCoderについて現時点で思うことをまとめておこうと思います。

主観盛りだくさんなので、間違ったことを言っているかもしれません。その場合は訂正してくださると嬉しいです。

 

情報

プロフ

東大工学部→東大院工学系研究科修士2年。情報系ではないです。

数学力

大学に入ってからは理論系に行かないことを決めていたので、あまり勉強していません。大学入試の数学はそこそこ好きでした。

プログラミング

大学3年の終わりまでは未経験でした。大学4年になって研究室に配属され、数値モデルのアウトプットの解析や、簡単なモデリングをやるためにPythonを使い始めました。

 

AtCoderについて

1. これまでの記録

始めたきっかけは、研究室でのコーディングが楽しかったことと、サークルの友人が競プロをやっていて興味を持ったからです。

以下精進グラフとパフォーマンスに沿って振り返ります。

 

f:id:bustle0309:20200427002125p:plain

Image Error

a. 緑色になるまで

一年ほど前にPythonAtCoderを始めました。初めて参加したコンテストは、2019/02/16のABC116*1でした。

初回からずっと緑パフォを出したり出さなかったりを繰り返していました。この頃はただただ目の前の問題を楽しく解いているフェーズだったと思います。難易度でいうと、茶色diffは通せて緑diffは通せないくらいでした。

何回か失敗しながらも、3ヶ月半で緑色になりました。このまま水色になろうと意気込んでいたように思います。

b. C++に転向

7月半ばごろにレート1000付近に到達したあたりで、伸び悩みを感じる時期がきました。この頃のパフォーマンスは安定していなかった上、最大値も1300程で頭打ちになっていました。

ここで、言語をPython3からC++に乗り換えることにしました。

言語についての議論は色々ありますが、僕がC++を使い始めた一番の理由は、蟻本や他の方のブログなど、ダイレクトに実装まで参考にできる資料が非常に多かったからです。心機一転、参考にできるものを多く読めるようにすることで、新たな知識をつけてレベルアップしようと思いました。

ちなみにこの頃競プロ用のTwitterアカウントを始めました。最初のツイートです。

しかし移行した結果、慣れなさや精進量の不足からか数回連続で冷え、モチベが下がってしまいました。その結果、9月以降ほとんどAtCoderをやらなくなりました。コンテストは1ヶ月に1度気が向いたら出るくらいで、もちろん精進量は増えず、レートは年末まで1000ほどで横ばいでした。

c. 2020年に入ってから

冬休み以降は生活にゆとりができてきたことと、2020年は何か目に見える結果を出したいと思ったこともあって、AtCoderを再開することにしました。ちょうど1/1からstreakを始め、現在も継続中です。並行して蟻本を読んだり、水色になるには必要と言われているアルゴリズム各種の勉強やライブラリ整備も進めました。

2月に入ってからはタキガワさん主催のあさかつというバチャコンにちょくちょく出るようになりました。これがきっかけでTwitterで相互フォローになってくださる方が増えたように思います。

また、2月末からこのブログを始めて、コンテスト参加記をまとめるようにしました。

コンテストでは最初一ヶ月はもたつきましたが、3月から水〜青下位パフォを複数出すことができ、4月末に水色になれました。

 

2. 実力をつけるのに大事だと思ったこと

主観になりますが、自分の経験やTwitter上での他の方の動向から、レート上昇に効果的だと思ったことをまとめます。

a. 精進量を積む

本田圭佑氏が「質の話するやつほど量やってない*2」と言っていたそうですが、これは真だと思います。Twitterで見かける伸びている人も大抵はかなり量やっていますし、まずはある程度量をこなすことは必要かと思います。

この点僕はまだまだなので、着実に進めていきたいと思います。

b. ストレッチする精進を心がける

ただやはり質も大事だという話です。

昨年僕が解いてきた問題は、ほとんどがもともと解けるような問題(灰diff〜茶diff)でした。今振り返ると、これはほとんど効果をなさなかったと思っています。当たり前ですが、レートを上げるには自分が過去に解けなかった問題を解けるようになることが必要で、解ける問題を食い散らかすだけではその実現は難しいです。筋トレでいうと、軽すぎるウエイトを持ち上げ続けている状態ですね。

今年に入ってからは、意識的に緑diff〜水diffの問題を解くようにしました。解説ACは6, 7割程と頻繁にしました。というのも、方針が立たない場合はそもそも知見がない場合が多いので、30分以上考え込んでも無駄だと思ったからです。また一方で、難易度の高すぎる問題(青上位diff〜)にはあまり手を出さないようにしました。難しい問題は考察ステップおよび必要な知識が複数にわたり、その組み合わせが難しさを生んでいると思われます。その一つ一つを身につけていない状態では、組み合わせた問題に取り組むのは逆に効果が薄いと思ったからです。重すぎるウエイトは持ち上げることはできません。

このように、自分に合ったラインの精進をできたのがレーティング上昇に寄与したと思っています。

c. streak

僕の場合streakを切らさないことが一つのモチベとなり、実力向上に寄与していると思います。streakについては議論がありますが、僕は個々人がモチベを保てるように使えればなんでもいいと考えています。

今年に入ってからはどんな形でもstreakを繋ぐことにしています。時間がなかった際は灰diffでstreakを繋いだこともありますが、モチベを消さないためには、たまにある虚無埋めは(実力上がらなくて良くないことですが)仕方ないと割り切っています。

個人的には、streakは目的ではなく手段として使えると良いと思います。

d. 思考のトレース

受験勉強でよく言われることですが、できる人がどういう考察ステップを辿っているのかを知ることは、解法選択の精度を高めるために重要だと思います。

最近では、解説生放送かつっぱさんの動画をよく参考にさせてもらっています。ソースコードが出来上がるまでの過程を知ることができるのは非常にありがたいことです。

解法選択(かつっぱさんの言葉を借りると解法ガチャ)が上手くなる上に、速い実装方法も学ぶことができてレート上昇に役立っていると思います。

e. ブログ

地味に役立っていると思うのがこのブログです。

コンテストごとに、少しでも自分が問題に対して考えたことをまとめておくだけで、かなり頭の中が整理される気がします。考察ステップの問題点や苦手分野の言語化などをしておくことで、考察や精進の改善案が浮かびやすくなります。

f. Twitter

Twitter上で同じように頑張っている人、結果を出している人を見ることで、日々とてもいい刺激を受けています。

ただ、「他人が自分よりも精進している、レートを短期間で爆伸びさせている」など、自分と他人を比較して萎える瞬間もありました。しかしこの悩みはナンセンスで、一人一人バックグラウンドも精進に割けるリソースも全く違うのだから、特に気にしなくていいと最近は割り切れるようになりました。自分と比較すべきは過去の自分ですね。

とにかく、今後も皆が努力している姿勢からいい影響を受け、また自分もいい影響を与えることができればと思います。FFの人はいつもありがとうございます。

 

3. これから

競プロはひとつの趣味なので、打算的なことはあまり考えていません。(結果として研究や就活に活きているのは間違いありませんが)

ただ、僕はテーマを問わず「自分が過去に持っていなかった能力を身につけ、より難しい課題を解く」ことがとても好きなタイプの人間なので、今後も楽しんで続けていこうと思います。

水色の段階では、まだまだ競プロの面白さの氷山の一角しかわかっていない状態だと思います。青色を目指してさらに頑張りたいです。 

 

4. 現在やっていること、今後やりたいこと

とにかく典型問題をサクサク捌けること、また難しめの知識を身につけていくことが必要なので、それらを目指して以下のことをやっています。

AtCoder 400, 500点問題埋め

いい難易度だと思うのでコツコツ進めたいです。

E869120さんの過去問精選

ライブラリ整備しながらやっています。まだ3割くらいしか埋まっていないので進めたいです。

蟻本初級編

解説を読んでいるばかりで、仕組みは理解しているが実装にもたつく、ということが多いので、基本的なアルゴリズムやdpはソラでかけるようにしたいです。

蟻本中級編、上級編

難易度高めの典型問題の知識を入れていきたいです。

 

 

---

長くなりましたがこの辺で。

次は青まで頑張ります。

 

 

*1:最初数回は古文ことPython2でやってました。

*2:ソースがTwitterで見つかりませんが、質を担保するためにはかなりの量をこなす経験が必要、という文脈だったと記憶しています。