C++ library for competitive programming
競技プログラミング用の C++ ライブラリです。
このライブラリは、名前通りニッチなもののみを実装しています。
- Luzhiled's Library, Nyaan's Library, cp-library-cpp のどれにも自分の求める要件を満たす実装が存在しないデータ構造、アルゴリズムのみを実装します。
- 原則として、実装するのは competitive-verifier で verify できるデータ構造、アルゴリズムのみとします。
- 現在、competitive-verifier での verify に使用できるオンラインジャッジは yukicoder, Library Checker (Yosupo Judge), Aizu Online Judge (AOJ) です。
- また、オンラインジャッジ上の既存の問題を使用しない verify も適宜実装しています。
- ドキュメントおよびソースコード中のコメントには原則日本語を使用します。
- Issue および Pull Request の description は日本語以外でも構いません。
ローカルでの verify は、以下のコマンドで行えます。
uv sync --group dev
bash .github/scripts/local_verify.shローカル verify では、過去のローカル verify の結果を使用できます。
キャッシュは ${XDG_CACHE_HOME:-$HOME/.cache}/niche-library/local-verify/ 配下に保存され、リポジトリのパスと competitive-verifier の設定、使用するスクリプトおよびコンパイラの fingerprint ごとに分離されます。
.competitive-verifier/config.toml、pyproject.toml、uv.lock、.competitive-verifier/config.toml 上の CXXFLAGS などが変わった場合は、古い verify 結果は prev-result として使用されません。
GitHub Actions の verify は、GitHub Actions 専用のキャッシュに保存された結果を使用します。 ローカル verify のキャッシュは GitHub Actions では参照しません。
過去のローカル verify の結果を使わずにローカル verify を実行する場合は、--no-prev-result を指定します。
この場合も、今回の verify 結果は次回以降のローカル verify 用に保存されます。
bash .github/scripts/local_verify.sh --no-prev-resultキャッシュを削除して全ての verify を再実行する場合は、--full を指定します。
bash .github/scripts/local_verify.sh --fullclang-format の確認も同時に行う場合は、--format を指定します。
bash .github/scripts/local_verify.sh --formatyukicoder の問題を verify する場合は、YUKICODER_TOKEN を環境変数に設定する必要があります。
以下のコマンドであれば、環境変数として YUKICODER_TOKEN をシェルに残さずに実行することができます。
bash -c '
set -euo pipefail
IFS= read -r -e -s -p "YUKICODER_TOKEN: " YUKICODER_TOKEN
printf "\n"
export YUKICODER_TOKEN
bash .github/scripts/local_verify.sh "$@"
' _オプションを渡す場合は、末尾の _ の後ろに追加します。
以下は、オプションに --no-prev-result を指定して実行する例です。
bash -c '
set -euo pipefail
IFS= read -r -e -s -p "YUKICODER_TOKEN: " YUKICODER_TOKEN
printf "\n"
export YUKICODER_TOKEN
bash .github/scripts/local_verify.sh "$@"
' _ --no-prev-result不具合の指摘または修正の Issue, Pull Request は歓迎します。
新規のデータ構造、アルゴリズムの追加についても条件を満たす場合は受け入れる可能性がありますが、追加の要望の Issue への対応は基本的に行いません。
詳しくは CONTRIBUTING.md を参照してください。