岸原オカルト研究部

プログラミングを勉強していくブログです

競プロ初学ログ(C#)

素敵な夜ですね。

競技プログラミングの勉強を始めてから少し時間が経ったので競プロの初学についてのログを書きます。 Atcoderを使っています。 対象読者は未経験~灰です。私も灰です。

これを読んだ貴方はC#で競プロを始めてください。同志がいません。 ただし、解説が大体C++です。

競プロとは? Atcoderとは?

競技プログラミングの事で、競技としてプログラミングの問題を解く事です。 Atcoderとは、そのコンテストサービスです。

現代のAtcoderについて

やっている限り、人口の流入が激化しています。 良いことだと思いますが、なんだか高速で3完(3問完答)するか、4完しないと茶色になれないイメージを受けます。

学習の基本方針

  • まず実戦、無理でも時間を測って疑似コンテスト、そして間違えたものを直す
  • 過去問(や教本)

の2パターンがあると思います。 ただ前者はC問題まである程度解けてD、Eが解けたり解けなかったりする人向けだと思います。 素人なので後者を選びました。

過去問をどこから追うか

https://kenkoooo.com/atcoder/#/table/

問題傾向が固まった(※ただしレベルは固まっていない)ABC40~ 色々な記事でよく例問に上がり始めるABC80~ 以降全テストケースが公開されているABC100~ 現在の六問制になり始めるABC126~ 以上の四つが区切りとして目立ちます。

一番「こうしておけばよかったな」と思うのはABC080~090の後ABC126~に進む流れです。 特に~ABC125とABC126~ではC問題の難易度や立ち位置が違いすぎるので、ABCのC問題全部解くぜ~とやっていた際、先にABC126~をやったほうが良かったです。

いつ受験を始めるか?

10回受けるまでは正しいレートが出ないとの事で、回数稼いでおいたほうがいいという気持ちもあります。 ただ、勉強で後から実力を上げると、後から結局の所もう10回受験する必要が出ます。

周りを見渡すとバッチリ時間が取れるなら緑パフォまではレートが上がる速度よりも実力が上がる速度が早い気がするので、緑パフォまではABC本番はほっとくのが最適解です。 この限界利益は人によって異なる事になります。

教本について

茶色レベルまでは教本は不要と思われます。ただ各教本の所感は書きます。 逆にAtcoderProblemで茶色レベル表記の問題まである程度解けるようになったら読んだほうが良いと思われます。

チーター本

中級者向け。前半は初心者でも有用。連載記事の纏めなので解説が最低限。C#のコードが有るのは嬉しい!!

ピラミッド本

中級者向け。前半は初心者でも有用。非常にわかりやすい記述だが記述内容が中級者向け。

螺旋本

初心者向け……に見える中級者向け。数学でいうと公式の証明を載せている本で、平易だが初心者向けではない。 もちろん、数学をやるなら自分で公式を証明できたほうが良いのと同様そのうち勉強したいが、どう考えても今ではない。

蟻本

難易度に対して解説が簡単すぎる!!!!!

茶色になる為によく使う/欲しいもの カッコは優先度低

・小学算数、中学数学 ・計算量の概念 オーダーキツイっすよ… O>109からが危険と言われても109という数字が覚えられない

・配列に記録して添字で呼び出して計算量を減らす例のやり方 よく見る ・List、Sort 特に地図の作り方 よく見る ・階乗 作っておくと楽できる ・最小公倍数、最大公約数 本番で必要になった時一から作ると遅い ・素数判定、全約数 本番で必要になった時一から作ると遅い ・全探索 よく見る ・ビット全探索 まれによく見る

(・順列総当たり 頻度は低いがたまに出る 順列を出す関数さえ持っておけば楽だがその分差をつけられる様子) (・いもす法 同じく低頻度ながら、原理が簡単なのに緑問題へのラッキーパンチが期待できる)

(・DP 優先度極低だが、公式解説がトンチの末の離れ業みたいなC問題をDPで強引に解いた他の方の解答もあったりしたので そもそもダイクストラ法とかもDPの応用らしくなるべく早いうちに概念だけは知っておいたほうが後から得する気がした フィボナッチ数列への適用とか単純にクールでかっこいいし)

深さ優先探索幅優先探索はあんまり見ないし学習が面倒くさいので後回しにした(勿論D問題からは頻出と思われる) 二分探索もいもす法と同じくラッキーパンチが期待できると思うがヒネった形でしか見たことがなく知識が役に立ったことはない(勿論D問題からは頻出と思われる)

茶色の範囲での対計算量対処(想定O>109時の対処)については、配列添字呼び出し、算数・数学を使ったO(1)化、二分探索、いもす法等を見た。

ちまちま作ったライブラリはこちら

kisihara-c.hatenablog.com

現在岸原オカルト研究部では、黒魔術(C#、競プロ)を研究しています。 twitter:@kisihara_c

他の黒魔術研究↓

超インスタント競プロ環境構築 C# - 岸原オカルト研究部