蟻本 上級編 練習問題 解法メモ集
蟻本の「練習問題」のところの問題を埋めました。 問題は面白いものがそろっているのですが、ほとんどが POJ の問題であり、
- 実行が遅く、TL が厳しい
- コンパイラが非常に古い(C++98)
- 一部の制約が書いていないため、エスパーする必要があることがある
などとつらい要素が多いです。本を読んだ後に練習したい場合、AtCoder 版!蟻本 (上級編)をやったりする方が良いと思います。
ただ、以下のように色々使える手はあって、埋めようと思うと意外と何とかなる印象です。
- POJ 以外のジャッジに同じ問題があるならそちらに提出する
- 半分程度の問題は他のジャッジに存在する
- ChatGPT に古いバージョンの C++の書き方に直してもらう
- clangd のようなツールを使って CE になりそうなところを指摘してもらう
https://vjudge.net/problem でタイトルを検索すると他のジャッジが使える場合も多いです。いろいろなアカウントを作るのは面倒なので、vjudge から bot 提出するのが多分楽です。 ただし、Baekjoon(BOJ)のように vjudge の bot をサポートしていなく、自分のアカウントを作る必要のある OJ もあります。 なお、Baekjoon(BOJ)には既に本家には提出できない GCJ の問題があり、蟻本の GCJ の章の問題を解くことができます。
基本的には蟻本の対応する部分は読んでいる前提で、アルゴリズムの説明などは入れていません
なお、記事はObsidian(Markdownで書けるノートアプリ的なもの)から適当なPythonスクリプトで変換しているため、一部表示がおかしくなっている可能性があります。
4-1 より複雑な数学的問題
- mod の世界
- 行列
- 数え上げ
4-2 ゲームの必勝法を編み出せ!
- 考察・動的計画法等
- Nim・Grundy 数
4-3 グラフマスターへの道
- 強連結成分分解
- 2-SAT
- LCA
4-4 厳選! 頻出テクニック(2)
- スタック
- デック
4-5 工夫を凝らして賢く探索
- 枝刈り
- A*, IDA*
4-6 分けて解いてまとめる!“分割統治法”
- 列の分割統治
- 平面の分割統治
- ツリーの重心分解