C++23で書かれた競技プログラミング(プロコン)ライブラリ。アルゴリズムのカテゴリごとにヘッダ/ソースファイルが整理されており、AOJ (Aizu Online Judge) の問題を使って online-judge-tools/verification-helper (oj-verify) で検証を行っている。
全検証テストの実行:
oj-verify runoj-verify が verify/*.test.cpp 内の #define PROBLEM "url" を読み取り、テストデータのダウンロード・コンパイル・実行・結果比較を自動で行う。
前提条件: Python 3, online-judge-tools
pip3 install online-judge-tools online-judge-verify-helperCI: GitHub Actionsがpushごとに oj-verify run を実行する。mainブランチでは oj-verify docs でドキュメントを生成し GitHub Pages にデプロイする (.github/workflows/ci.yml 参照)。
C++標準はC++23。
フォーマット・静的解析:
# clang-format で全ファイルをフォーマット
cmake --build build --target format
# フォーマットチェック(CIと同じ)
cmake --build build --target format-check
# cppcheck で静的解析
cmake --build build --target cppcheck
# format-check + cppcheck をまとめて実行
cmake --build build --target lint設定ファイル: .clang-format, .cppcheck-suppressions.txt
-
ライブラリモジュール — 各トップレベルディレクトリにアルゴリズムの実装が
.cppまたは.hppファイルとして格納されており、コンテストの解法に#includeして使う:datastructure/— Fenwick木、セグメント木、遅延評価セグメント木、Union-Find、Link-Cut木、Static Top Treegeometry/— 2D幾何プリミティブ (geometry.cpp)、凸包、アレンジメント、最近点対、接線graph/— Dijkstra、Bellman-Ford、最大流 (Dinic, Edmonds-Karp, Ford-Fulkerson)、SCC、LCA、橋、関節点、トポロジカルソート、Auxiliary Tree; 共通のgraph.hppがEdge/Graph型を定義math/— エラトステネスの篩、FFT、剰余演算string/— Aho-Corasick、Suffix Arraymisc/template.cpp— コンテスト用テンプレート (bits/stdc++.h、ACL、ll・epsなどの共通マクロ/型定義を含む)
-
検証 (
verify/) —oj-verifyベースのテストで、AOJの問題に対してライブラリの正当性を検証する:- 各問題は
verify/{problem_id}.test.cppとして配置 - ファイル先頭の
#define PROBLEM "url"でジャッジのURLを指定 - 浮動小数点比較が必要な問題は
#define ERROR 1e-8等で許容誤差を指定 - 設定は
.verify-helper/config.tomlに記載
- 各問題は
- ライブラリファイルはテンプレートの
typedef ll Weightおよびusing ll = long longを使用する graph.hppのEdgeの比較演算子は意図的に逆順 (大きい方がtrueを返す) にしており、priority_queueの最小ヒープとして使うため- グラフ表現は2種類が共存: レガシーの
Edge/Graph(typedef ベース) と新しいテンプレート版のedge<T>/graph<T> - ドキュメントは日本語。
oj-verify docsにより自動生成され GitHub Pages にデプロイされる