Skip to content

Commit 92c4d36

Browse files
authored
AGENTS.md を加筆修正 (#104)
* AGENTS.md を加筆修正 * 修正
1 parent 2428a06 commit 92c4d36

17 files changed

Lines changed: 101 additions & 98 deletions

AGENTS.md

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,18 @@ Markdown では、改行のために行末を意図的に 2 個の空白にす
109109
- `main` 関数内の全ての `return 0;` の前の行には、空行が 1 行入っている。
110110
- `main` 関数の最後の行にも `return 0;` が記述されている。
111111

112+
### ドキュメント(共通)
113+
- TeX 数式の囲みが `$ $` である(`\( \)` などでない)。
114+
- TeX 数式の前後は、空白または改行である(たとえ前後が句読点であっても、`$` との間に空白を入れている)。
115+
- TeX 数式での絶対値記号による囲みが `\lvert \rvert` である(`| |` などでない)。
116+
- TeX 数式の等号付き不等号や否定記号は `e` で終わるコマンド(`\ge`, `\le`, `\ne`)で記述されている(`\geq`, `\leq`, `\neq` などでない)。
117+
- 複数のインライン数式が連続して並ぶ場合、1 つの TeX 数式として記述されている(数式の外の `,``` などで区切られた複数の TeX 数式になっていない)。
118+
112119
### ライブラリのドキュメント
113120
- ライブラリのドキュメントは箇条書きを中心とした簡潔な記述である。
114121
- 先頭に Jekyll Front Matter がある。
115122
- `documentation_of` が対応するヘッダファイルを指している。
116-
- `title` は人間にとって分かりやすい名前になっており、適切に TeX 数式を使用している
123+
- `title` は人間にとって分かりやすいタイトルになっている(TeX 数式を使用してもよい)
117124
- 「前提: 」や「備考: 」などにおけるコロンは、半角コロンと半角スペースである(「前提:」「前提:」「前提 : 」などでない)。
118125
- 自動で挿入される、対応するヘッダファイルの include 指令のテキストを必要なく記述していない。
119126
- 使用例のソースコードなどの、include 指令が実際に必要である例は除く。
@@ -124,23 +131,19 @@ Markdown では、改行のために行末を意図的に 2 個の空白にす
124131
- ソースコードによる例だけで説明を済ませていない。
125132
- `## 計算量` の節で、計算量の種類を略して「時間」または「空間」と表記する場合、`時間 $O(n)$` のように計算量よりも前に書く(`$O(n)$ 時間` などでない)。
126133
- `## 計算量` の節に記載されている、big-O 記法などのランダウの記法による計算量オーダーは、ランダウの記法の数学的な定義に従った厳密な値であり、ランダウの記法を用いることが自然なものである。
127-
- 関数 $f$ を用いて計算量オーダーを $O(f)$ と記述する場合、$f$ は正しい上界である(悪い例は、入力サイズ $n$ についての漸近計算量オーダーが実際は $\Theta(n\log n)$ であるのにもかかわらず、$O(n)$ と記述するなどである)。
128-
- 関数 $f$ を用いて計算量オーダーを $\Theta(f)$ と記述する場合、計算量オーダーは実際に $f$ で上からも下からも抑えられる(悪い例は、入力サイズ $n$ についての漸近計算量オーダーが実際は $O(n)$ であるのにもかかわらず、$\Theta(n \log n)$ と記述するなどである)。
129-
- 関数 $f$ を用いて計算量オーダーを $\Omega(f)$ と記述する場合、$f$ は正しい下界である。
134+
- 関数 $f$ を用いて計算量オーダーを $O(f)$ と記述する場合、 $f$ は正しい上界である(悪い例は、入力サイズ $n$ についての漸近計算量オーダーが実際は $\Theta(n\log n)$ であるのにもかかわらず、 $O(n)$ と記述するなどである)。
135+
- 関数 $f$ を用いて計算量オーダーを $\Theta(f)$ と記述する場合、計算量オーダーは実際に $f$ で上からも下からも抑えられる(悪い例は、入力サイズ $n$ についての漸近計算量オーダーが実際は $O(n)$ であるのにもかかわらず、 $\Theta(n \log n)$ と記述するなどである)。
136+
- 関数 $f$ を用いて計算量オーダーを $\Omega(f)$ と記述する場合、 $f$ は正しい下界である。
130137
- ランダウの記法を用いる場合、非負整数 $N$ に対する $(\log N)^{-1}$ のように値が小さい場合に未定義になる式を用いていても修正する必要はない。特に、多変数のランダウの記法であっても、一部の変数のみを無限大に飛ばして他の変数を小さい値に固定した場合を考慮して過度に複雑な式にする必要はない。
131138
- big-O 記法を用いて厳密に記述するのが難しい計算量であれば、適宜 $\tilde{O}$ や $\mathrm{poly}$ などを用いている。
132-
- このライブラリで特殊化した特定の定数に比例する場合は、ランダウの記法以外を用いてその旨を説明している(悪い例は、$O(128)$ などである)。
139+
- このライブラリで特殊化した特定の定数に比例する場合は、ランダウの記法以外を用いてその旨を説明している(悪い例は、 $O(128)$ などである)。
133140
- `## 計算量` の節で、平均計算量や期待計算量などの最悪計算量と償却計算量以外の計算量を述べる場合は、その旨を説明している。
134141
- 数式として書くべきである制約などの記述は、バッククォートによる囲みなどではなく TeX 数式として書いてある。
135142
- 1 文字の値(数学定数などローマン体で表記されるべき値を除く)はイタリック体である(`\mathrm{ }` などを使用していない)。
136143
- 引数などの、通常の数式に現れないような 2 文字以上の文字列で表される値を数式中で使用する場合は、先に別の文字でおいている。
137144
- おいた文字は、イタリック体の 1 文字もしくはイタリック体の 1 文字に上付きまたは下付きの数や文字列が付いたものである。
138145
- 上付きまたは下付きの文字列が英字 1 文字(数学定数などローマン体で表記されるべき値を除く)であれば、イタリック体になっている(`\mathrm{ }` などを使用していない)。
139146
- 上付きまたは下付きの文字列が、ローマン体で表記されるべき値または 2 文字以上の文字列であれば、`\mathrm{ }` を使用している。
140-
- TeX 数式の囲みが `$ $` である(`\( \)` などでない)。
141-
- TeX 数式での絶対値記号による囲みが `\lvert \rvert` である(`| |` などでない)。
142-
- TeX 数式の等号付き不等号や否定記号は `e` で終わるコマンド(`\ge`, `\le`, `\ne`)で記述されている(`\geq`, `\leq`, `\neq` などでない)。
143-
- 複数のインライン数式が連続して並ぶ場合、1 つの TeX 数式として記述されている(数式の外の `,``` などで区切られた複数の TeX 数式になっていない)。
144147
- ライブラリのドキュメント中の C++ ソースコードの例は「```C++」から「```」までによって囲まれている(特に、先頭は「```」や「```c++」「```cpp」などでない)。
145148

146149
### リポジトリのドキュメント

docs/geometry/line-convex-polygon-intersection.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: 凸包と直線の交点($O(\log N)$)
2+
title: 凸包と直線の交点( $O(\log N)$
33
documentation_of: geometry/line-convex-polygon-intersection.hpp
44
---
55

@@ -61,7 +61,7 @@ documentation_of: geometry/line-convex-polygon-intersection.hpp
6161

6262
- `LinePolygonIntersectionPoint<T>::x_numerator`, `y_numerator`, `denominator`
6363
- 交点の有理表現である。
64-
- `denominator` を $q$ として、$q>0$ になるように正規化している。
64+
- `denominator` を $q$ として、 $q>0$ になるように正規化している。
6565
- 前提: `x_numerator`, `y_numerator`, `denominator``T` で表せる。
6666

6767
## 計算量

docs/graph/others/graph-isomorphism.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ documentation_of: graph/others/graph-isomorphism.hpp
2929
## 計算量
3030

3131
頂点数を $n$ とする。
32-
また、$i=1,2$ について、`edges_i` を $E_i$$M_i=\lvert E_i\rvert$ とする。
32+
また、 $i=1,2$ について、`edges_i` を $E_i$$M_i=\lvert E_i\rvert$ とする。
3333

3434
- $M_i$ は多重辺を重複込みで数え、自己ループも入力 $1$ 個を $1$ 本として数える。
3535
- $U$ を $2$ つのグラフの内部辺要素の個数の合計とする。内部辺要素は、同じ頂点対に入った辺を $1$ つにまとめ、本数を `count` として持つ。自己ループの頂点対も $1$ つと数える。
3636
- 多重辺は重複を消して同一視するのではなく、内部辺要素の `count` まで比較される。
37-
- $D$ を内部隣接リストの全長の合計とする。$D\le 2U$ である。
38-
- $L$ を色分割中に作られる signature の最大長とする。$L\le 2n+2$ である。
39-
- $S$ を DFS で訪問した状態数、$R$ を全状態を通した色分割更新回数の合計とする。$R\le S(n+1)$ である。
37+
- $D$ を内部隣接リストの全長の合計とする。 $D\le 2U$ である。
38+
- $L$ を色分割中に作られる signature の最大長とする。 $L\le 2n+2$ である。
39+
- $S$ を DFS で訪問した状態数、 $R$ を全状態を通した色分割更新回数の合計とする。 $R\le S(n+1)$ である。
4040
- 探索メモは平衡二分探索木で持つ。状態キーの比較の最悪時間計算量は $O(n)$ である。
4141
- $C_{\mathrm{build}}=M_1\log M_1+M_2\log M_2+n\log n+n+M_1+M_2$ とする。
4242
- $C_{\mathrm{ref}}=D\log n+Ln\log n+Ln+D+n$ とする。
@@ -47,4 +47,4 @@ documentation_of: graph/others/graph-isomorphism.hpp
4747
- 探索メモの検索または挿入は時間 $O(C_{\mathrm{memo}})$ である。
4848
- 色がすべて単独になった状態での辺集合比較は時間 $O(C_{\mathrm{check}})$ である。
4949
- 全体は時間 $O(C_{\mathrm{build}}+RC_{\mathrm{ref}}+S(C_{\mathrm{memo}}+C_{\mathrm{check}}))$ である。
50-
- 最悪の場合、$S$ は指数的に大きくなる。
50+
- 最悪の場合、 $S$ は指数的に大きくなる。

docs/graph/tree/01-on-tree.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ documentation_of: graph/tree/01-on-tree.hpp
66
## 概要
77

88
- 根付き木の各頂点 $v$ に $V_v=(0,\ldots,0,1,\ldots,1)$ を置く。
9-
- $0$ の個数は $c^{(0)}_v$ 個、$1$ の個数は $c^{(1)}_v$ 個である。
10-
- 親が子より左に出るように頂点を並べるとき、$V_v$ をその順に連結してできる列の転倒数の最小値を求める。
9+
- $0$ の個数は $c^{(0)}_v$ 個、 $1$ の個数は $c^{(1)}_v$ 個である。
10+
- 親が子より左に出るように頂点を並べるとき、 $V_v$ をその順に連結してできる列の転倒数の最小値を求める。
1111
- 辺は無向辺の両端で与え、根を指定して親子関係を定める。
12-
- 根でない成分のうち $c^{(0)}/c^{(1)}$ が最大のものを親へ縮約する。$c^{(1)}=0$ の成分は最大として扱う。
12+
- 根でない成分のうち $c^{(0)}/c^{(1)}$ が最大のものを親へ縮約する。 $c^{(1)}=0$ の成分は最大として扱う。
1313
- 比の比較は積を作らずに行う。
1414

1515
## 使い方
@@ -26,8 +26,8 @@ documentation_of: graph/tree/01-on-tree.hpp
2626
- `c0[v]` は頂点 $v$ の列に含まれる $0$ の個数である。
2727
- `c1[v]` は頂点 $v$ の列に含まれる $1$ の個数である。
2828
- 頂点 $v$ の列は $c^{(0)}_v$ 個の $0$ の後に $c^{(1)}_v$ 個の $1$ を置いたものとする。
29-
- `root` を $r$ として、$r$ は根の頂点番号であり、$0\le r<n$ である必要がある。
30-
- 前提: $n\ge 1$、辺数は $n-1$、`c0``c1` の長さは $n$ である必要がある。
29+
- `root` を $r$ として、 $r$ は根の頂点番号であり、 $0\le r<n$ である必要がある。
30+
- 前提: $n\ge 1$ 、辺数は $n-1$ `c0``c1` の長さは $n$ である必要がある。
3131
- 前提: `edges` は $1$ つの木を表す必要がある。頂点番号が範囲外、自己ループ、閉路、到達不能な頂点がある場合は `assert` に失敗する。
3232
- 前提: 各 $c^{(0)}_v,c^{(1)}_v$ は非負の個数である必要がある。
3333
- 前提: 内部の累積個数と返り値型 `T` 上の答えが用途に対して十分な範囲を持つ必要がある。
@@ -37,4 +37,4 @@ documentation_of: graph/tree/01-on-tree.hpp
3737

3838
頂点数を $n$ とする。
3939

40-
- 固定幅の整数の算術演算の計算量を $O(1)$ として、時間 $O(n\log n)$、空間 $O(n)$ である。
40+
- 固定幅の整数の算術演算の計算量を $O(1)$ として、時間 $O(n\log n)$ 、空間 $O(n)$ である。

docs/graph/tree/hl-rec-dp.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,11 @@ int main() {
133133
134134
## 計算量
135135
136-
- 木の根付き化と重い子の選択: $O(n)$。
137-
- 軽い辺だけで再帰が深くなるため、再帰段数: $O(\log n)$。
138-
- $K$ を `Spec::K` の値とする。部分木 1 回分の値計算の呼び出し回数は $O(n^{\log_2(K+1)})$。
139-
- 全頂点の `before_vertex` と `after_vertex` を回収する実行については、同様に $K\ge 2$ ならば $O(n^{\log_2(K+1)})$ 回、$K=1$ ならば $O(n\log n)$ 回である。
140-
- 各呼び出しで、`Spec` 側の処理時間が掛かる。典型的な場合として $K=2$、各処理が $O(X)$ ならば $O(n^{\log_2 3}X)$ である。
136+
- 木の根付き化と重い子の選択: $O(n)$
137+
- 軽い辺だけで再帰が深くなるため、再帰段数: $O(\log n)$
138+
- $K$ を `Spec::K` の値とする。部分木 1 回分の値計算の呼び出し回数は $O(n^{\log_2(K+1)})$
139+
- 全頂点の `before_vertex` と `after_vertex` を回収する実行については、同様に $K\ge 2$ ならば $O(n^{\log_2(K+1)})$ 回、 $K=1$ ならば $O(n\log n)$ 回である。
140+
- 各呼び出しで、`Spec` 側の処理時間が掛かる。典型的な場合として $K=2$ 、各処理が $O(X)$ ならば $O(n^{\log_2 3}X)$ である。
141141
142142
## 参考文献
143143
1. Soh Kumabe, Takanori Maehara, and Ryoma Sin'ya. Linear Pseudo-Polynomial Factor Algorithm for Automaton Constrained Tree Knapsack Problem. In WALCOM: Algorithms and Computation, Lecture Notes in Computer Science, Vol. 11355, pp. 248–260. Springer, 2019. doi:10.1007/978-3-030-10564-8_20.([arXiv のリンク](https://arxiv.org/abs/1807.04942))

docs/internal/int128.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ documentation_of: internal/int128.hpp
3636
- 前提: 入力される値が `NicheLibrary::Int128` の範囲に収まる。
3737
- 前提: 演算結果が `NicheLibrary::Int128` の範囲に収まる。
3838
- 前提: 除算と剰余では、除数が $0$ でない。
39-
- 前提: 型の最小値を $m$ として、$m / -1$ および $m \bmod -1$ を行わない。
39+
- 前提: 型の最小値を $m$ として、 $m / -1$ および $m \bmod -1$ を行わない。
4040

4141
- `NicheLibrary::UInt128::div_mod(lhs, rhs, quotient, remainder)`
4242
- `lhs``rhs` で割った商と余りを求める。
4343
- 関数の返り値はない。`quotient` に商を、`remainder` に余りを書き込む。
4444
- 前提: `rhs` は $0$ でない。
45-
- 備考: `lhs` を $L$、`rhs` を $R$、`quotient` を $q$、`remainder` を $r$ として、$L=qR+r$ かつ $0\le r<R$ が成り立つ。
45+
- 備考: `lhs` を $L$ `rhs` を $R$ `quotient` を $q$ `remainder` を $r$ として、 $L=qR+r$ かつ $0\le r<R$ が成り立つ。
4646
- 備考: `lhs``rhs` が同じオブジェクトを参照していてもよい。
4747
- 備考: `quotient``remainder``lhs` または `rhs` と同じオブジェクトを参照していてもよい。
4848

@@ -52,7 +52,7 @@ documentation_of: internal/int128.hpp
5252
- 前提: `rhs` は $0$ でない。
5353
- 前提: `lhs` が型の最小値でないか、または `rhs` が $-1$ でない。
5454
- 備考: 商は $0$ 方向へ丸める。
55-
- 備考: `lhs` を $L$、`rhs` を $R$、`quotient` を $q$、`remainder` を $r$ として、$L=qR+r$ が成り立つ。
55+
- 備考: `lhs` を $L$ `rhs` を $R$ `quotient` を $q$ `remainder` を $r$ として、 $L=qR+r$ が成り立つ。
5656
- 備考: `remainder` が $0$ でない場合、`remainder` の符号は `lhs` の符号と一致する。
5757
- 備考: `lhs``rhs` が同じオブジェクトを参照していてもよい。
5858
- 備考: `quotient``remainder``lhs` または `rhs` と同じオブジェクトを参照していてもよい。

docs/math/combinatorics/online-binomial-sum.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ documentation_of: math/combinatorics/online-binomial-sum.hpp
66
## 概要
77

88
- 整数 $n,m$ と重み $r$ に対する二項係数の prefix sum を $\displaystyle F(n,m)=\sum_{i=0}^{n-1}r^i\binom{m}{i}$ とおく。
9-
- 半開区間の左端、右端をそれぞれ $l,u$ とする。$\displaystyle \sum_{i=l}^{u-1}r^i\binom{m}{i}$ をオンラインで求める。
9+
- 半開区間の左端、右端をそれぞれ $l,u$ とする。 $\displaystyle \sum_{i=l}^{u-1}r^i\binom{m}{i}$ をオンラインで求める。
1010
- $\binom{m}{i}=0\;(i>m)$ として扱う。
11-
- 前計算を行う長さを $k$ とする。$m$ をバケットに分け、境界を $m_0$ とおいて $F(k,m_0)$ を前計算する。
12-
- $d=m-m_0$ とおく。$m=m_0+d$ では $\displaystyle F(n,m)=\sum_{j=0}^{d}r^j\binom{d}{j}F(n-j,m_0)$ を使う。
11+
- 前計算を行う長さを $k$ とする。 $m$ をバケットに分け、境界を $m_0$ とおいて $F(k,m_0)$ を前計算する。
12+
- $d=m-m_0$ とおく。 $m=m_0+d$ では $\displaystyle F(n,m)=\sum_{j=0}^{d}r^j\binom{d}{j}F(n-j,m_0)$ を使う。
1313
- $r=0$ や $r=-1$ でも $r+1$ による除算は行わない。
1414

1515
## 使い方
@@ -18,15 +18,15 @@ documentation_of: math/combinatorics/online-binomial-sum.hpp
1818
- `OnlineBinomialSum<T>(int max_m, T r = T(1))`
1919
- $0\le m\le M$ のクエリに対する前計算を行う。
2020
- `r` は重みで、省略時は $1$ である。
21-
- 前提: `T` は四則演算を持つ。`std::numeric_limits<T>::is_integer``false` の場合、$T(1),T(2),\ldots,T(M)$ で除算できる。
21+
- 前提: `T` は四則演算を持つ。`std::numeric_limits<T>::is_integer``false` の場合、 $T(1),T(2),\ldots,T(M)$ で除算できる。
2222
- 備考: 整数型では中間値が `T` の範囲を超えない必要がある。
2323
- `T binom_prefix_sum(int n, int m) const`
2424
- $\displaystyle \sum_{i=0}^{n-1}r^i\binom{m}{i}$ を返す。
25-
- 前提: $n\ge 0,\;0\le m\le M$。
25+
- 前提: $n\ge 0,\;0\le m\le M$
2626
- 備考: $n>m+1$ のときも assert 違反にせず、全体の和を返す。
2727
- `T binom_sum(int l, int u, int m) const`
2828
- $\displaystyle \sum_{i=l}^{u-1}r^i\binom{m}{i}$ を返す。
29-
- 前提: $0\le l\le u,\;0\le m\le M$。
29+
- 前提: $0\le l\le u,\;0\le m\le M$
3030
- 備考: $u>m+1$ や $l>m$ のときも assert 違反にしない。
3131

3232
## 計算量

0 commit comments

Comments
 (0)