diff --git a/.claude/commands/make-docs.md b/.claude/commands/make-docs.md new file mode 100644 index 00000000..0f919696 --- /dev/null +++ b/.claude/commands/make-docs.md @@ -0,0 +1,87 @@ +$ARGUMENTS で指定された .hpp ファイルに対応する .md ドキュメントを作成してください。 + +引数が空の場合はエラーメッセージを出して終了してください。 +引数にはグロブパターン(例: `src/math/*.hpp`)や複数ファイルも指定可能です。 + +## 手順 + +1. 対象の .hpp ファイルを読み、公開インターフェース(クラス・関数・定数)を把握する +2. .hpp と同じディレクトリ以下の `test/` を探索し、対応するテストファイル (`*.test.cpp`) があれば読む + - 対応の判定: テストファイルが `#include` で対象 .hpp を参照しているか + - `#define PROBLEM` の URL をすべて収集する +3. 既存の .md ファイルが同ディレクトリにあれば読み、内容を尊重しつつ更新する(上書きではなく差分更新) +4. 以下の規約に従って .md ファイルを作成し、.hpp と同じディレクトリに配置する + - ファイル名: .hpp と同名で拡張子を `.md` に変える(例: `prime.hpp` → `prime.md`) + +## 規約 + +### Front Matter(必須) + +```yaml +--- +title: English Name (日本語名) +documentation_of: ./filename.hpp +--- +``` + +- `title`: 英語名 + 括弧で日本語の説明。例: `Primitive root modulo $n$ (原始根の発見)` +- `documentation_of`: 必ず `./filename.hpp` の形式(相対パス、同一ディレクトリ内) + +### 冒頭の概要(必須) + +Front matter 直後に、1〜2 文でこのライブラリが何をするか簡潔に書く。 +計算量があれば $O(\cdot)$ 記法で明記する。LaTeX 数式を積極的に使う。 + +良い例: + +- `$10^{18}$ 以下の正の整数を素因数分解する.` +- `自然数 $N$ の入力に対し,$O(N^{2/3})$ で素数計数関数 $\pi(x)$ の値を計算.` + +悪い例: + +- `素因数分解をするライブラリです.` (何の?制約は?) +- 計算量を省略している + +### 本文セクション(任意、必要に応じて) + +以下のセクションを必要に応じて記載する。すべて必須ではない。 +**ライブラリが単純(ラッパー関数1つ等)なら概要 + 問題例だけで十分。無理にセクションを増やさない。** + +#### アルゴリズムの説明 + +- `## 原理`, `## ナイーブな説明`, `## 実装されているアルゴリズムについて` 等のセクション名 +- 数式を多用してアルゴリズムの概要を説明 +- 背景知識の説明を含めることもある +- コードの実装詳細(変数名の逐一説明等)ではなく、数学的・アルゴリズム的なアイデアを書く + +#### 使用方法 (`## 使用方法`) + +- C++ コードスニペットで使い方を示す +- 関数シグネチャ、引数の意味、返り値を説明 +- 複数の関数がある場合はサブセクション (`###`) で分ける +- テンプレート引数がある場合はその制約も記載する + +### 問題例セクション(強く推奨) + +```markdown +## 問題例 + +- [Problem Name - Judge](URL) +``` + +- テストファイルの `#define PROBLEM` URL を必ず含める +- 他の関連問題があれば追加してよい +- テストファイルが見つからなかった場合はこのセクションを省略する + +### 参考文献セクション(任意) + +`## 参考文献・リンク` または `## リンク` の見出しで記載する。 + +### 文体・スタイル規約 + +- 日本語で記述(技術用語・変数名は英語のまま) +- 句読点は「,」「.」(全角カンマ・ピリオド) +- LaTeX 数式を積極的に使用(`$...$` インライン、`$\displaystyle ...$` でブロック風) +- コードブロックは ` ```cpp ` で囲む +- セクション見出しは `##` から始める(`#` は使わない) +- 簡潔に書く。冗長な説明は避ける diff --git a/Makefile b/Makefile index bb313cc8..6afdd6b0 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ .PHONY: format format: - find . -name "*.hpp" -o -name "*.cpp" -not -iwholename "*/.verify-helper/*" | xargs clang-format --Werror -i -style=file + find . -type f \( -name "*.hpp" -o -name "*.cpp" \) -not -iwholename "*/.verify-helper/*" | xargs clang-format --Werror -i -style=file diff --git a/data_structure/wavelet_matrix.hpp b/data_structure/wavelet_matrix.hpp index 43b3a459..3cd30bcf 100644 --- a/data_structure/wavelet_matrix.hpp +++ b/data_structure/wavelet_matrix.hpp @@ -326,7 +326,7 @@ template class wavelet_matrix { wavelet_matrix wm; wm.build(); -vector tmp(wm.D(), vector>(wm.N())); +vector tmp(wm.D(), BIT(wm.N())); wm.apply(i, j, [&](int d, int idx) { tmp[d].add(idx, wx); }); // point add T ret{}; wm.prod(l, r, u, [&](int d, int l0, int r0) { ret += tmp[d].sum(l0, r0); }); // range sum diff --git a/multithread/parallel_runner.hpp b/multithread/parallel_runner.hpp index d6fa3c9a..676be327 100644 --- a/multithread/parallel_runner.hpp +++ b/multithread/parallel_runner.hpp @@ -137,7 +137,7 @@ template class ParallelRunner { /* Usage: struct Solver { - using Ret = int; + using Ret = lint; void read_stdin() { // read input using std::cin diff --git a/rational/rational_number.hpp b/rational/rational_number.hpp index 7400a792..08d9439e 100644 --- a/rational/rational_number.hpp +++ b/rational/rational_number.hpp @@ -2,7 +2,7 @@ #include #include -// Rational number + {infinity(1 / 0), -infiity(-1 / 0), nan(0 / 0)} (有理数) +// Rational number + {infinity(1 / 0), -infinity(-1 / 0), nan(0 / 0)} (有理数) // Verified: Yandex Cup 2022 Final E https://contest.yandex.com/contest/42710/problems/K template struct Rational { Int num, den; // den >= 0