過去記事
レート推移
成長し続けているとは思えていたし、赤レート程度なら必ず達成できるとは思っていましたが、半年でいけるのか、1~2年なのか、5年くらいかかるのか等は全然読めなかったです(同じ実力推移だったとしても、rated 頻度・問題相性などの運で半年以上早くても遅くても、不思議ではないですし)
春~夏はうーん、言語アプデ後の環境への不慣れや不運な事故で下振れてたとは思うので、実力向上はしていたと思いますが。見かけ上は rated コンテストが増加したこのタイミングで急にレートが上がってくれました。
考察も実装も伸びてきて、倒せる最高難易度も上がってきているんですけど、私の場合はレートに直結した(伸びが遅い時期に足を引っ張っていた)のは、最高難易度より 2, 3 下のレベルの安定性(考察・実装)かもしれません。言語アプデからしばらく経って、現環境での実装の安定感が増したのも大きいと思います。
解いた問題
- AtCoder:3029 / 約3770 (80%)、3位
- yukicoder:1036 / 1292。一時期は 1000 / 1050 くらい。
- ProjectEuler:701 / 734。一時期は 700 / 720 くらい。
今年は前半は yukicoder を進めていました。言語アプデが来て以降は、AtCoder に専念中です。両立が下手なので、今は AtCoder 以外はほぼ止めています(逆に AtCoder を止めていた時期もあります)。
区分別
- 赤 diff 以下:制覇
- AGC-D:制覇
- JOI:非公式難易度 10 まで制覇
- 旧 ARC-D:93 / 103
旧 ARC-D は特に、橙になった頃も半分くらいしか進められず、解けるようになっていくのか疑問に感じていたのですが、考察を詰め切る力がついてきたのか想像以上に進められて嬉しい。
問題数
合計 4800 問程度でしょうか。橙以上では珍しい問題数ではないと思いますが。
上達法の話になると、たくさん解くというのはよく言われると思います。私は上達したいと思っていたので、(同レート帯と比べても)物量でも劣らないようにしようとは意識していました。それが実現できているかは分かりません(及んでいない人も割と居そう)が、手を出しているコンテンツでの AC 数ランキングを見る限りは、橙~の中でもまずまずの質・量をこなせたのかなと思っています。
まぁそもそも、「問題を考える → 解ける → 嬉しい」というのが競プロを続けるモチベーションの大きい部分でしょうからね。基本的には特に苦行という感じではなく、日々充実していますよね。
かけた時間
質問箱にあったんですけど、わかんねーですね。雑に 600 日間として、まぁ 2000~5000 時間の間くらいじゃないですか。
食事をしているとき、歩いているとき、電車内で、風呂に入っているとき、布団で横になっているとき。毎回ではないですが、問題を考えていたり、競プロの記事を読んでいたりします。そういう時間をかけた時間に含めるかどうかでだいぶ変わりますね。数学書やアルゴリズム書を読む時間とかはどうだろう。そういうの全部入れれば 4, 5000 時間くらいあっていても不思議ではないですかね。もうちょい少ないかな。
競プロ時間がないと思い込んでいる人は、まず「競プロやるぞ」と切り替えなくても頭の中に考えたい問題とか勉強したいアルゴリズムとかが積まれているような状態を目指すと、意外と時間が増やせるんじゃないでしょうか。どんなゲームでも最上位層はたいてい、そういうモードに入っている期間がありますよねえ。
いまブラウザで読んでいるこの記事、読み終わったら考えようと思っている問題、勉強しようと思っているアルゴリズムなどは、いくつありますか?
着手しているコンテンツ数
手を出しているコンテンツ数は、少ない方だと思います。単純に AtCoder だけでも手一杯という感じですね。
私は手を出したら、埋められるところは埋める方が好きっぽいのですが、挑戦適正レベルちょっと下くらいの問題を解いて満足感を得るだけにならないように、コンテンツ数を減らして調整しています。AtCoder 上では(まだまだ見落としもありますが)数分考えれば解けるような問題はかなり解ききってしまっていて、AC 数をひとつ増やそうとするだけでもしっかり考えないといけないものの割合が高く、とても良い感じです。
まあ使用言語の関係もあります。Python について、コンテストサイトによってバージョンや使えるライブラリの幅などが違って、AtCoder 環境下でのコーディングの練習に不向きな場合があります。私は現在は、今取り組んでいるコンテンツで手一杯ですが、将来的にこの要素にも向き合わなければいけないかもしれません。
解説 AC
これはほとんどしていないです。解けなかったら $n$ ヶ月寝かせてリトライです。連敗してほぼ進まないときもありますが、解ける問題が 1 つも見つからなくなったことは今のところないです。
- 有名な問題や、リアルタイム参加したコンテストについて、わりと twitter でキーワードを見てしまうことがあります。これは回避する努力はしていないです。
- 競プロ記事も、ネタバレ気にせず読みます。「〇〇法の解説記事」みたいなので扱われている問題などは、実質的に、解説 AC になっているものがあります。
- 「こういう手法あるかなー」等検索する等もやります。最近はだいぶ減りました。
なお、解けた問題についてはほぼ必ず解説を読みますし、問題名でググって記事を探すこともかなりやります。
アリ本をおおよそ読み込んだくらいの基礎知識があって、ABC 帯の問題がほとんど解けていて、他の人の記事やツイートなどから得られる知識に対して貪欲な生活(基本的なところだと、知らないキーワードはぐぐるとか)を続けているのであれば、かなりの高難易度であっても、問題を解くのに必要な知識や解法パターンが不足していることはほとんどないと思います。
考察は、愚直解法やサンプルを観察して、分かった必要十分や十分条件を書き出したり、問題をとらえる場合分け軸をいろいろ考えたりと、時間をかけてやっていけば、たくさん失敗してなかなかうまくいかない場合でも、何ひとつも手がかりが得られない問題ってかなり少ないと思います。全然分からないと思っても、時間を置いたり他の問題を何百問と解いてから戻ってくるとすんなり分かることもありますね。
その他
モチベーション
何千問と練習しても、コンテストでのパフォーマンスって結局勝負どころ 1, 2 問との相性や立ち回りで簡単に上下するので、なかなか安定させるの難しいです。ので、基本的には
- レートの増減に一喜一憂しすぎない。
- レートを成長の測る目安としすぎない。
- AC 数が増えたり、新しい知識を学んだり、実装の工夫を見つけたり、…という要素を成長要素と考える。
というのは意識しています。失敗して落ち込むことはありますし、レートも伸び悩むことはありますが、そういう時期も含めて、今のところ成長できていないと感じた時期はありません。
レートが思うように上がらずモチベーションを下げている方を見ることもありますが、目標意識を持てたり達成感が得られる要素を他にいくつか用意しておくと良いと思います(普通は highest 更新はせいぜい 4000 回しか出来ないですし、レートでしか喜びが得られない人に優しいゲームじゃないです)。
基本的にはひとつでも多く AC することを目指して日々を過ごしていますが、「AC 数」は易問が増えれば勝手に増えてしまうので、「未 AC 数」「AC 率」なども気にしています。
コンテスト直前
開始15分前とかそういう話。コンテストや普段の練習での気づきを、自分で書き出してまとめていて、これを直前に読み返しています。普段、なかなか復習の時間ってとっていないんですが、ちょうど良いタイミングですかね。
- 簡単な心構え、例えば
- 「序盤をちゃんと解くと最低パフォは簡単に上がる」というメモ、これをせず後悔した回の覚え書き
- 「誤読注意(ABC序盤を除き、丁寧にサンプルを確認)」や事例など
- 最近やらかした、バグらせパターンの一覧
- 最近新たに試した実装パターンやデバッグ手順
- 軽く復習したい問題
- 貪欲法問題集のリストアップとか
- その他、考察での簡単な気付きなど
- 〇〇を使うっぽい問題に見えたら、実際には〇〇ということもある。とか。
この手の資料化への意識を高めたのは、今年の夏頃なんですが、もっと初期からやってても良かったかもしれませんね。パフォーマンス向上への影響は評価しにくいですが。
こういう工夫、競プロ以外ではほとんどやったことがなかったし、あまり上手にできていないと思うんですが。しばらくは続けてみます。
勉強会
2019/04 から、競プロer で有志を募って、勉強会を始めました。今年度は、『組合せ論』『Graph Theory』の輪読をやっています。私は数学は全般的には詳しい方ですが、この辺の分野はあまり勉強したことがなかったので、知識の補強になっています。
コスパは問題を解くことに劣ると思いますが、(ものすごく意欲的に時間を作らなくても)知識を継続的に獲得し続けられる環境が出来たのが良いですね。
コスパは劣ると書いたものの、
(組合せ論)包除原理、指数型母関数、木グラフ数え上げ
(Graph Theory)Hallの定理、カット空間
など、リアルタイム参加のコンテストでもここ半年だけでも見かけていますし、過去問と合わせればなおさら。もともと少し知っていた話であっても、反応が速くなったりしていそうです。
競プロ界は twitter だけでも人材がめちゃ豊富なわりに、専門書の輪読などあまり見ないですね。もっとこういう動き出てきても良いのでは?と思っています(低レート層でもアリ本何人かで一緒に勉強するとかもできそうだし、レベル帯関係なくできるのでは)。オンライン勉強会も流行っている時期で、オフでコミュニティを作る必要がなく、ハードル低め。
Python
別に、縛りプレイでやってるわけじゃないので「Python でも〇〇」みたいな評価は望んでいないですし、Python が流行って欲しいとかユーザーが強くなって欲しいとかも思っていないんですが、一応注目されているので少し書いておきます。
橙達成記事で、「rated contest で、難易度2800以下のものは全てACできることが証明されています。」と書きましたが、非rated(通称試験管diff)も含め、AtCoder Problems 3200 以下まで埋まることは証明しました。
これは Python だと通らないという主張を見かけることはだいぶ視界から減ってきが気がします。「これは maspy さんしか通してないから厳しい」みたいなのは未だに見かけて謎です。私の半分の問題数ですら AC している人がほとんど居ない言語ですし、高難易度にどんどん挑戦している方も少ないので、言語のポテンシャル関係なく簡単にAC人数1人2人とかになります。
あとは、別に言語に強く拘っているわけではないので、Python で競プロをやるのに不向きな環境のコンテストサイトに着手する場合、他言語の練習を始める可能性もあります。
heuristic contest
赤になるまではかなり優先度を下げていましたが、今後は少しは練習していくと思います。レートが付き始めるという話もありますし、問題解決の幅が広がるのは面白そうです。
ところで私、ゲームで理論値とか好きなんですよね。音ゲーでも簡単なところからフルコンやパフェで埋めていきがちですね。競プロの AC したら満点になるところ、好きなんです。heuristic contest は、満点のないところで少しでも上を目指すゲームで、これがどう出るか…。こっちの方が熱中してやり込むのが苦手だとは思います。
writer / tester
かなり前から、赤になったら writer にも挑戦してみようかなとは思っていました。いま具体的な予定があるわけではありませんが、少し作問に取り組む時間を増やしていければいいなと思っています。
tester に関しては、具体的な予定があります。ARC を増やすために tester 要員が不足しているという話を聞いたときに、名乗り出ました(色変と関係なくやる予定でした)。例えば ABC が増えて欲しいかというと個人的には関心が低いですが、ARC が増えて欲しいというのには共感したため。質の高いコンテストに出来るよう頑張ります。