あめんばーどのバーチャル日記

バーチャルな世界で過ごして競プロしてる人の雑談

【atCoder】黄入した7か月半の振り返り

初めまして。閲覧ありがとうございます。

2020年の9月末に初めて競技プログラミングに触れて2完パフォ70爆死したあの日からだいたい半年ちょい。
先日開催されたARC117でついに青入しました。

と書いた一ヶ月後のARC119で黄入しました。なんだこれ。 

 

普段競プロでお世話になってる方から「記事書くんですか!?」と煽られつつも、まぁ振り返りもいいかということで、ブログ開設して書き溜めてみました。

 

 

 はじめに

当記事では「黄色になるまで」の単純な振り返りをします。参考になるかは意識して書いてません。
半年でここまで至れたのは、非常に恵まれた条件があった為な気がします。特に環境。
で、その環境は何かということでもう一つの記事でVRでの学習環境の振り返りをしようと思ってます。

 競プロ触るまでの自己紹介

全体的に意欲興味関心自信失い気味のお年頃でケモノ趣味を嗜みながらテキトーに過ごしてました

  • 今は普通のプログラマ
    • グラフィックスに強めだがアルゴリズムに縁はなし。競プロやってる人がいるなんて聞いたことない
    • マネジメント関連はメンターとか数回引き受けてる程度
  • 前職はCADに似たなにか
    • 情報分野は趣味と教職課程以外では未経験新卒
    • もう少し難しくしたらAHC出そうな三次元処理アルゴリズムC++研究開発してた
    • 全然興味なかったがそもそもまともに就活できる精神状態じゃなかった
  • 大学時代は数学専攻
    • 興味持った分野がないのに特に考えず院進し、ノリでグレブナー基底やその親戚を扱った
    • 途中から教育心理学や教育数学を面白く感じて、ノリで数学と情報で教員免許取る
    • プログラミング自体は割と好きで得意な感じはあったが、周りで話せる人は特になし
    • サークルのWEB管理しててPHPとかも触れた
    • 勉学以外の活動で自己肯定感や自己実現欲求を根こそぎ奪われてた時期
  • 高校時代
    • まあまあ上くらいの高校。競プロは単語すら知らない。JOIの単語は知ってたけど何してるのか知らない
    • 趣味半分でゲーム作りにPerlやらHTMLやら、夏休みの宿題で円周率の研究したくてJavaScript触れたりしてた
    • JMO本戦進出数回
  • そのほか
    • 就職後ノリでAPとか数検1級とか、友人が社会人に教えてて面白そうだったから統計数理1級とか
    • 元から組合せや場合の数好きだったが、自覚したのは修了後
    • タイピングは速いと断言してもさすがにいいかなレベル

うーむ参考になる…?

競プロ界隈に関わり始めてからtwitterJMO12完!!とか中二で春合宿参加決まりました!!!とかを見るようになって私も縮こまりまくってるので、まあ、なんというか、すごい界隈ですよね。縮こまるけど大変刺激的です。
もっともっと早く出会いたかったなーとは何度も思いますが、逆に言えば日本の競プロ環境ができて今こうして楽しめてることには感謝の限りです。

 黄までのふりかえり

とりあえずメモ半分に書くだけでも。

 きっかけ

今日も元気だVRChatをやろう。エトワーニュくんは最高にかわいいなぁ。この人のさくらもちアンワルくん超かわいいし作ってるワールドも素晴らしいよなぁめちゃめちゃ尊敬するなぁ。
あれVRChatの写真を上げてますね。VRC競プロ部のABC感想会だって。そういえば私も前なんとなくDiscord入ったっけ。
そういえば私「今のお仕事的にシェーダー知りたい」とか「元々教育分野関心あってVRでのトレーニングや学習環境に軽い関心がある」とか思って勉強目的でVRChat来てたんだっけ。ワスレテタナー。
ちょっとやって顔出してみようかな。

初参加6問中2完、Perf.70

 灰色~(だいたい1か月)

競プロ並びにatCoderに慣れること。これが最優先でした。

C++の業務経験はあったのでそれ以外はそこそこ知っており、水あたりまでは出れば上がる時期でした。部長曰く「開始時点から緑相応の実力はある」とのことでした。

実際この頃は基本茶色で時々800ちょいが出るって感じでした。

  • とにかく競プロにあって仕事にない文化や問題の点数価値を全く知らない
    • 32bit整数を当たり前のように使ってWA出て原因に一生気づかないを緑入までやらかし続ける
    • 「これGCDじゃないの?でも問題で聞いてるんだからちゃんと求めた方が良いんだろうな」⇒TLE(GCD求める問題だった)
    • ABを解いた後にCDがわからないからとEを解こうとした
    • 名前のついているアルゴリズムを一つも知らない
    • 計算量??知ってるけどボトルネックの時しか見たことないよ…???っていうか多分考えてなかったよ…?
    • グラフの概念は知ってるけど前職で自己流で作っただけだから正しい作り方知らない
  • 感想会は灰茶緑水で揃ってまったり基礎をさらう感じだった
    • 当然みんなが何を言ってるかもわからない

灰色時代の過ごし方みたいな記事はなかったのでわりとVRC競プロ部の部長に頼りっきりでした。

 茶色~(だいたい半月)

この頃はちょっと慣れてきたので数学手法や標準ライブラリを聞く問題なら殴れるようになり楽しくなってきてました。既に水パフォ安定してました。あとAGC二完して青パフォ(Unrated)取ってたりHTTFで90位取ってお金貰えたり。
振り返りとしては

  • 茶色の間もずっと必要な時以外32bit整数使用したり、解答する言語を選び間違える等凡ミスは日常茶飯事
  • 相変わらず独特の手法は知らず、UnionFind?いもす法?DP?なにそれ状態
    • そこも含め「ライブラリを作る事」を覚えた
  • めちゃくちゃ強い人がVRC競プロ部に来た灰と橙以外全色揃った感想会もあった
  • 蟻本買った
 緑色~(だいたい2か月)

引き続き水パフォが安定で茶色と変わらない時期でした。振り返りとしては

  • 競プロ部の強い人中心に上位陣の日本人の回答を見るようになった
    • マクロを使うようになった
    • やっとlong longを使うようになった
  • 蟻本を完全に理解はせずとも、とりあえず読み終えた
    • データ構造についてちょっと意識するようになった
    • わかる範囲で頑張ってライブラリを試しに移しはじめた
  • 初黄と共に卒業
 水色~(だいたい3か月)

5割くらいで青パフォ以上が出始め、典型問題出ると殺されて典型以外だとブン殴れる差が顕著になってきた時期。DPも苦手でした。

  • 「蟻本勉強会」をVRC競プロ部で企画し始める
    • 蟻本の例題やお題に従った問題を用意しておき、みんなで議論する会
    • 一周目ざっと流してた計算量をちゃんと意識し始めるようになる
  • またさらに競プロ部で強い人が来る5人参加でHighest水青黄橙赤一人ずつの感想会が何度もあった
  • atCoderProblemsの存在を知り、わりとハマる
    • やりすぎて身体壊す
  • CodeForcesにも手を出す
    • お仕事しながら精進しながら趣味しながら夜中に出ようとして、身体壊す
  • ACLを使い始め、PracticeContestも埋めた
    • そこそこ無理してちょっと身体壊す
  • 1400超えた辺りで「半年経過前に青になってやる」「HTTFいけたからAHCいける、いかなきゃ」「強くならなきゃ」と思いすぎて逆に停滞し、ちょっと嫌になる
    • その考えを捨ててコンテストに臨んだら純粋に楽しいと思えてから持ち直す
  • EDPCを全埋めする
    • 夜更かしすぎてやっぱり身体を壊すものの、これに関してはめちゃくちゃ楽しんでやったので全然辛くなかった
  • マクロが物凄い量になる
  • 二度目の黄パフォで無事卒業
 青色~(だいたい1か月)

最近だけど一番わかんない時期

  • 興味だけはあったから競プロを知る前に買うだけ買って放置してたヴァン・リント&ウィルソンを読み始める
  • 蟻本読書会が3章に突入する
  • 部長に唆されて青入記事書くか迷ってた時に、前後関係見ずナナメ読みすると「暖色記事以外は無視」と誤解しかねない内容のツイートを見て、自分の中で何かが発火する(ちゃんと読めばそこまで過激なツイートではない)
  • 強くて教え方の上手い人に「自分の弱点を補うと良い」とアドバイスを受ける
    • 「典型問題が解けない」と言い「それは量を解くのが一番」と受け、意識するようにちまちま精進しだす
    • ちょうどよかったので競プロ典型90問を埋め始める
  • 突然の橙パフォ三連発で一週間でレートが313増える 3renpatu.png

 振り返ってみて大事だと思ったこと

当たり前だったりよく言われるけどやっぱ大事だったなぁって思ったこと振り返り。

  • 競プロはゲーム
    すごくよく言われる。
    先述の通り3月ごろ(水色後半)無理しようとしてレートは伸びないし心身は病むしひたすら嫌になるしで悪循環でした。ゲームで負けてイライラしてさらに動き悪くなる時と完全に同じ感情でした。チーム戦なら味方クソと言いそうになる。
    燃えたり頑張ったり悔しがったり落ち込んだりは大事とは思いますが、病む程の義務感抱える必要はないなと。ゲームとは言い切れない要素もありますが、ゲームくらいの身構えが適切なんだなとこれからも思っていきたいなぁと。

  • ライバル(近しい議論のできる相手)がいる
    「レッドコーダーの作り方」で秋葉さんも仰ってましたね。VRC競プロ部の皆様でこれは本当に恵まれたと思います。
    特に近しい格上の人は自分の分からない点を的確に汲み取ってくれる上に目標にしやすく、非常にありがたい存在でした。私もちゃんと話せるようになりたい…。

  • 強い人のコードを見る
    実装力直結の超重要項目。これ一回でコードの書き方がめっちゃ変わった事も何度か。私もすっかりマクロ好き。
    あまりに格上だと最初から最後まで中身が全く理解できないものとかありますが、めげずにその「理解できない」を調べるか、わかる人で探しましょう。

  • 体調万全
    コンテスト前に20分仮眠を取るようにしたら難しいの解けること多かった感覚があり毎回やってます。そして夜眠れなくなります。

  • 紙に書く
    とにかく考えを整理する媒体は必須でした。高校以来のぐちゃぐちゃノートが完成しました。

  • 復習ACする
    暖色や金銀問題だと解答ACしないって話はたまに見ましたが、ABCなら暖かいうちにすぐ復習はシンプルに力になった気がします。感想会の後にそれをするので夜更かし気味。

  • ライブラリは自分で実装する
    中途半端な理解で見様見真似でもライブラリを組んでみてよかったと思います。そして作りの甘さがコンテスト中発覚して爆死。verify問題やABCでトライアンドエラーを繰り返し、だんだんなんで動いているのか紐解けたり、応用にも対応できるようになったり。応用はダイクストラでとか特に多かったですね。
    勉強ってやっぱり手を動かして間違えてなんぼみたいなところありますよね。

  • 自分の苦手は把握する or 典型を知る
    橙三連発の理由で一番疑わしいもの、これくらいしかないので効果絶大かもしれない。ありがとうE8さん。

  • 早解き
    水青時代からABC早解きはかなり影響大。解けなくても速度でカバーできたり、壁問題が出れば稼ぎになりいいことづくめで、どちらかというと私は途中から恩恵を受けられる側でした。
    ライブラリ作成、マクロ使う、開発環境を整える、タイピングを早める、ACLを把握しておく、サンプルを即見等で問題理解を早めるその他諸々。いろいろありますね。

  • 数列の知識や立式力
    競プロ中に典型以外で殴れた時の印象って「特徴を立式できるか」「入力値によって答えはどういった増減をするか目星をつけられるか」「単純なサンプルや実験から規則性を導き出せるか」「その他だいたいでいいのでどんな値になりそうか目星がつけられるか」
    そこから「コンビネーション(パスカルの三角)」「余事象」「多項式」「漸化式(DP)」「総和」「線形代数(行列)」「GCD/LCM」「場合分け」「群」その他その他。その引き出しを出し目星がわりと活かせた機会が多かったなと思ってます。
    そもそもそういう知識を線で繋げていくのがこういう分野と言われればその通りで当たり前にも聞こえるかもしれませんが、久しぶりにそれを実感したなと。後述しますが、その言語化ができるようになりたいですね。

  • コンテスト前に酒は飲まない
    二回くらいやっちゃったけどまぁひどい成績だった。未成年の皆様こんな大人にならないでね。コンテストあるからという理由で飲酒頻度が激減したんだよな…。
    日本酒興味ある人はぜひおすすめ聞いてくださいね。おいしいものとおいしくないものの格差がすごく大きいので。

 これから

  • 黄入後一か月、ABC・ARC共に黄だったり青だったりで伸びる空気が微塵もないので精進はまだ続ける。

    • 典型・バグらせやすいもの・文字列操作・制約を読まない・蟻本4章あたりは苦手意識あるので触れたい
    • Problemsも青はそこそこ頑張ったけどまだまだなのでそこそこにがんばる
    • 橙が目指せる気が全くしないというか、そもそも黄入できると思ってなかったから維持の自信がない 
  • ぱいそん身につけて、そっちで典型90二周目をする

  • 蟻本会が終わったらABC-Dくらいまでを対象にした催しを考えたい
  • 前職で考えてたアルゴリズムを問題ない範囲で一般化させたものをたまに語りたい

    • それに直結するゲームをたまに妄想してる
  • 競プロ部の人に「どのようにその考えに至ったのか」を聞かれ答えられないことが多かったので、意識してたまに考えをまとめてみたい

    • 感想会中「たぶん正しそうだと思った」というトンデモ発言を何度かしてた
    • それを言語化できない自分が少し悔しいし、自分にとっても他人にとってもためになりそうな言語かな気がする
  • 引き続き楽しめる範囲で新しいものに触れてく

    • 忙しくなったり他に興味が出たりつまんなくなったらやめる
    • やりたくなったら再開する
    • 楽しかったらほどほどの範囲で無理する
    • kaggleも気が向いたら触りたい
    • 蟻本以外の本もチラ見したい
    • ヴァン・リント&ウィルソン読み終えたい
    • 他の趣味もまたやりたい

problems_210624.png
水時にそこそこ青埋めましたが、そんなに埋められてない。今は典型90埋め埋め。

 

こんな感じですかね 

 

自惚れた話ですが、精神的な問題ですっかり失ってた自信を少しだけ調子に乗り出して持ち直して意欲が湧いてる気がして、なんかいい感じです。俺は暴龍天だぞ。

少しくらいだったらなんだか面白い話に参画しに行けたりしないかなぁなんて、ちょこちょこ思ったり。あともうちょっとお給金増やせないかなぁとか。グラフィックスの勉強したい欲とか趣味の時間は引き続きほしい欲もあるけど。

まあ、でも今後も楽しめる範囲でたっぷり楽しんでいけたらなと思います。

 

では次回、VRでの学習環境のお話で。