Rubyで競技プログラミング
背景
積読状態だった問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書) | 大槻兼資, 秋葉拓哉 | 工学 | Kindleストア | Amazonを読んでいる。昔PythonでAtCoderのABC問題を解いたりしてたが仕事ではPythonを使うことがほぼない。なので当時の記憶はぼんやりしか残っていない。今は専らRubyを書き、次点でTypeScript/Dart/Goあたりを使うことがほとんどだ。
ところでRubyで競プロなんて遅すぎて無理なのでは?と思っていたんだけどRubyでAtcoder青入りしました! - kona0001の日記やRubyでAtcoder水色になりました! - kona0001の日記を読んでRubyでも競技プログラミングやってる人いるんだ〜となった。
個人的に緑~水色くらいまでイケればひとまず充分なのでそれなら普段描き慣れているRubyで参戦できれば楽しそうと感じた。少々Ruby特有のハックが必要なこともあるっぽい( Ruby競プロTips(基本・罠・高速化108 2.7x2.7) を参照 )のだけどD問題くらいまでならなんとかなりそう。10^6がギリギリみたいな話やN^2やN^3系の問題もシビアっぽいのだけど、そういう時はCrystal使えばいいかくらいな気持ちで雑にやってみたい思う。
やること
RubyでAtcoder水色になりました! - kona0001の日記に書かれていた「水色までに必須の知識」をまずは潰していく。既知のものは軽く流す。
上記以外の典型問題の知識はAtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiitaを見て拾って行く
水色までに必須の知識
計算量の見積もり力
全探索
bit全探索
剰余の逆元
高速な組み合わせ計算
modの巡回性質
べき乗の高速計算
包除原理
式変形
高速な素数判定
エラトステネスの篩
エラトステネスの篩の応用で倍数除去 O(logN)
gcd、lcmの理論
累積和
処理すべきクエリQがいっぱい出てきたら大体使う
累積max(左右から累積和)
imos法/別解説
尺取り法
貪欲法
幅優先探索
BFS木
ダイクストラ法
メモ化再帰
区間スケジューリング
Unionfind
ヒープ
その他の知識(随時追加)
競技プログラミングで解法を思いつくための典型的な考え方 | アルゴリズムロジック
動的計画法
動的計画法が苦手な人が、動的計画法が超苦手な人へアドバイスしてみる - じじいのプログラミング
部分和 / 部分和問題 | アルゴ式
bit全探索
深さ優先探索
二部グラフ
トポロジカルソート
DAG
ベルマンフォード法
負辺: 負の重みを持つ辺
負閉路: 長さが負の閉路。負閉路を持つグラフでは(そこへ到達するパスがあるかぎり)そこをぐるぐる回ればいくらでも重みを小さくできるので最短経路が求められない。
中国剰余の定理
フェルマーの小定理
ダブリング
素因数分解問題
数列をヒストグラム化する / バケットとも呼ぶらしい
不変量
AtCoderで出来なかった問題
AtCoderで初見で出来なかった問題一覧
リンク
問題集
AtCoder:競技プログラミングコンテストを開催する国内最大のサイト
AtCoder Problems
アルゴ式
AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita
競プロ典型 90 問 - AtCoder
競技プログラミングの鉄則 演習問題集 - AtCoder
解説集
drken - Qiita
けんちょんさんのQiita全て
アルゴリズムロジック
競プロの典型アルゴリズム解説が豊富
Ruby競プロTips(基本・罠・高速化108 2.7x2.7)
Ruby用便利情報満載
その他
RubyでAtcoder青入りしました! - kona0001の日記
RubyでAtcoder水色になりました! - kona0001の日記
universato/ac-library-rb: a Ruby port of AtCoder Library (ACL).
AtCoder での実力アップを目指そう! ~競プロ典型 90 問~ - Qiita
問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書) | 大槻兼資, 秋葉拓哉 | 工学 | Kindleストア | Amazon
解説が程よい丁寧さ。ど初心者向けではないが。
競技プログラミングの鉄則 ~アルゴリズム力と思考力を高める77の技術~ (Compass Booksシリーズ) | 米田 優峻 |本 | 通販 | Amazon
この本に対応した競技プログラミングの鉄則 演習問題集 - AtCoderというAtCoderの自動採点システムがある
YuheiNakasaka/playground-rb
自分のメモコード
ruby 競技プログラミング アルゴリズムとデータ構造