This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub knshnb/competitive_library
#include "src/Math/PascalTriangle.hpp"
パスカルの三角形によるコンビネーションテーブルの作成。 O(n^2)。 素数でないModで逆元計算ができないときや、整数の範囲で階乗がオーバーフローしてしまうときに使える。
/// @docs src/Math/PascalTriangle.md template <class T = long long> struct PascalTriangle { std::vector<std::vector<T>> binom; PascalTriangle(int n) : binom(n + 1, std::vector<T>(n + 1)) { for (int i = 0; i < n + 1; i++) { binom[i][0] = 1; for (int j = 1; j < i + 1; j++) { binom[i][j] = binom[i - 1][j - 1] + binom[i - 1][j]; } } } // nCr T operator()(int n, int r) { assert(0 <= n && 0 <= r && r <= n && n <= binom.size()); return binom[n][r]; } };
#line 1 "src/Math/PascalTriangle.hpp" /// @docs src/Math/PascalTriangle.md template <class T = long long> struct PascalTriangle { std::vector<std::vector<T>> binom; PascalTriangle(int n) : binom(n + 1, std::vector<T>(n + 1)) { for (int i = 0; i < n + 1; i++) { binom[i][0] = 1; for (int j = 1; j < i + 1; j++) { binom[i][j] = binom[i - 1][j - 1] + binom[i - 1][j]; } } } // nCr T operator()(int n, int r) { assert(0 <= n && 0 <= r && r <= n && n <= binom.size()); return binom[n][r]; } };