This documentation is automatically generated by online-judge-tools/verification-helper
本ライブラリのいくつかのデータ構造では、一般の群で内部の演算が抽象化されているものがあります。そのようなデータ構造はSrc/Algebra/Group/*.hpp
内のクラスや、それらと同様の実装をしたクラスをテンプレート引数で渡すことで利用することができます。
集合 $S$ と $S$ 上の二項演算 $f:\ S\times S\to S$ の組 $(S, f)$ は以下の条件を満たす時、群といいます。
どのクラスも、基本的には以下のような枠組みで実装されています。
template <class T>
class Group {
using Element = T;
static constexpr T identity() noexcept {
}
static constexpr T operation(const T& l, const T& r) noexcept {
}
static constexpr T inverse(const T& v) noexcept {
}
};
template引数 T
上の説明でいう、 $S$ です。例えば $32$ bitで収まる範囲で足し算をしたい時は int
型やzawa::i32 (= std::int32_t)
型を引数に入れることになります。
using Element = T
データ構造等で群の型にアクセスする時に使います。必ず用意してください。
identity
上の説明でいう、単位元を返すメソッドです。引数をとらず、 T
型の値を返り値とするメソッドである必要があります。
operation
上の説明でいう、二項演算です。 必ず T
型の変数 $2$ つを引数にとり、 T
型の値を返り値とするメソッドである必要があります。
noexcept
は無くても大丈夫です
inverse
上の説明でいう、逆元を返すメソッドです。必ず T
型の変数 $1$ つを引数にとり、 T
型の値を帰り値とするメソッドである必要があります。