情報妖精の競プロ日記スマートフォン用の表示で見る情報妖精の競プロ日記AtCoderの問題に対する方針を主に書きます2020-01-01AtCoder黄色になりました!AtCoder黄色になりました!さて、競プロでは色変をしたら記事を書く伝統があるので、私もその伝統に倣って書いていこうと思います。AtCoder黄色になるまでにやったことまず、グラフを見れば分かるように、青色になってからずっとレートは安定しており、正直言って青色適性だと言える期間が1年半ほど続いていました。ここ三か月ほどはずっと黄色パフォーマンスを出すことに成功しており、結果として黄色に到達することができました。そこで、自身の経験から黄色コーダーになるために何をやったかを書いていきます。解法ブログを書いたこのブログを見て頂ければ分かりますが、去年の始めまでは解法をブログに上げていました。ブログに書くことで自分の思考が整理され、また綺麗でより本質的なコードを発見できる機会があり、これ自体は悪くなかったかと思います。ブログを編集する時間はかなり長く、その時間があれば精進量をかなり増やせたことを考えると、そこまで効率の良い方法ではなかったかもしれません。解法ブログは後進を育成する数少ない手段でもありますから、界隈自体を考えるなら書いた方が良いものでしょう。私も今年はちゃんと書いていこうかなって思います。得意な言語に切り替えた今までC++でずっと競プロを行っていましたが、去年の5月頃からJavaに切り替えました。それに伴い、今まで競プロ用だからと使い捨て前提で書いていたライブラリを整備し、Javaでライブラリを書く際はいつでも使えるようなライブラリを作ることを目指しています。AtCoderのコード長制限は512KBとかなり緩いので、ライブラリを長く書き、JavaDocコメントを入れて可読性を向上させても提出に支障はほぼありません(提出欄に貼ると5秒ほど固まる問題はありますが......w)。この変更により実装力が相対的に向上し、提出速度が速くなったことでレートの底上げに貢献したと考えられます。実際、夏休み中にライブラリを一通り移行した後の9月からレートは伸びていることを考えると、競プロだからとC++を書くよりは得意な言語を継続して使った方がより良いのかもしれません。C++は最後の手段としていつでも使えるようにしておくのもまた必要に思えます。atcoder.jpという問題があり、C++などでは愚直でも最悪ケースが間に合うとして話題になっていたこれですが、このようなC++では間に合いそうだけど自分の言語ではTLE......と悩む問題があった時に、C++で即座に書き直して提出する力はやはり持っておきたいところです。ライブラリを使いやすく整備したまだ途中なので、整備した、と言い切るには抵抗がありますが......まぁ良いでしょう。5月頃からJavaに切り替えた際、ライブラリも競プロ用ではなくどこでも使えるものとして書き直しています。標準ライブラリに匹敵する使い勝手を確保しようと、ちゃんとJavaDocコメントを書いたり、コードの内部にも適切にコメントを残すことで実装が見て分かるようになっていたり、抽象化、例えばセグメント木にモノイドが載る(実際は圏が載りますが)ということでMonoidインターフェースを継承したものを載せられるようにしたりとあちこちで使いやすい工夫を施しています。これは高速化という点でも実は貢献しており、例えば今PrimeModIntegerはPrimeクラスをコンストラクタに渡すことで生成できるのですが、素数という限定化をしたことで割り算が場合分けをせずに素直に定義できるようになったりと結果的にメリットにつながる場面も多く出てきています。適切でない引数にはちゃんとコンパイルエラーあるいは早期のランタイムエラーが出るので、変なバグを掴まされることが減るのも良い点です。重いアルゴリズムだけでなくごく簡単なアルゴリズムもライブラリ化することで、むしろ使い勝手が上がるかもしれません。(C++だとstd::algorithmみたいなの)ライブラリは可視化できる最も効果的な精進方法なので、みんなもやってみましょう!他のブログでよく見るので、私が持っている知識・ライブラリも列挙してみます。有理数こんなところでしょうか?まだまだ作りたいライブラリは沢山あり、少なくとも今年中に100個以上は生成するつもりです。ファイル数だと、今見積もっていますが1500個を超える予定です(ヤバい)。ライブラリを作るのは時間がかかりますが、知識を整理するという点では良いアウトプットになると思います。自分用のまとめWikiを作って公開するライブラリは勿論貼ればいいのですが、例えば包除原理など有名な知識ですがライブラリにできないものも存在します。いった知識の使い方や使う場面などを纏めたホームページが欲しいと思っていて、それを作る予定です。このブログを更新するまだグラフ関連と行列関連のライブラリが弱いので先にそっちを整備しますが、それが終わればこのブログを再開したいと思います。ブログで解法を上げるのを止めてしまった理由、綺麗なコードを書こうとして時間が無限に取られたのが原因なのですよね。長くなる部分を全てライブラリに任せることができれば、また復活できると思います!最後にAtCoder、黄(Beginnerがunratedになり、AGCへの参加権利を得る)/橙(作問バイトに申し込む権利を得る)/赤(Regularがunratedになる)で権限が変わってくるので、ここからは本気で頑張らないとヤバそう。簡単に負けたりはしないよ!努力量は黄色の中で最下位層であり、かなり異質な精進をしている(らしい)私だけど。月別アーカイブはてなブログをはじめよう!CuriousFairy315さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。