daylight-library

This documentation is automatically generated by competitive-verifier/competitive-verifier

View the Project on GitHub daylight-pro/daylight-library

:warning: daylight/math/comb.hpp

Depends on

Required by

Code

#include "daylight/base.hpp"
template<typename T>
struct Comb {
private:
	vector<T> _fact;
	vector<T> inv;
	int pre_build;
	void expand(int x) {
		if(pre_build == -1) return;
		while(SZ(_fact) <= x) {
			int next = SZ(_fact);
			_fact.push_back(_fact[next - 1] * next);
			inv.push_back(_fact[next].inv());
		}
	}

	T nPr_calc(int n, int r) {
		T ret = 1;
		for(int i = n; i > n - r; i--) ret *= i;
		return ret;
	}
	T nCr_calc(int n, int r) {
		T ret = 1;
		REP(i, r) {
			ret *= n - i;
			ret /= i + 1;
		}
		return ret;
	}

public:
	Comb(int pre_build = 0): pre_build(pre_build) {
		if(pre_build == -1) {
			return;
		}
		_fact = vector<T>(pre_build + 1);
		_fact[0] = 1;
		inv = vector<T>(pre_build + 1);
		REP(i, pre_build) {
			_fact[i + 1] = _fact[i] * (i + 1);
		}
		inv[pre_build] = _fact[pre_build].inv();
		REPR(i, pre_build) {
			inv[i] = inv[i + 1] * (i + 1);
		}
	}
	T nPr(int n, int r) {
		assert(r >= 0);
		assert(n >= r);
		expand(n);
		if(pre_build == -1) return nPr_calc(n, r);
		return _fact[n] * inv[n - r];
	}
	T nCr(int n, int r) {
		assert(r >= 0);
		assert(n >= r);
		expand(n);
		if(pre_build == -1) return nCr_calc(n, r);
		return _fact[n] * inv[r] * inv[n - r];
	}
	T nHr(int n, int r) {
		assert(r >= 0);
		assert(n >= 1);
		expand(n + r - 1);
		return nCr(n + r - 1, r);
	}
	T type_permission(vi V) {
		assert(pre_build != -1);
		int sum = 0;
		for(int i: V) {
			assert(i >= 0);
			sum += i;
		}
		expand(sum);
		T ans = _fact[sum];
		for(int i: V) ans *= inv[i];
		return ans;
	}
	T fact(int n) {
		expand(n);
		return _fact[n];
	}
	T inv_fact(int n) {
		expand(n);
		return inv[n];
	}
};
Traceback (most recent call last):
  File "/home/runner/.local/lib/python3.10/site-packages/competitive_verifier/oj_resolve/resolver.py", line 181, in resolve
    bundled_code = language.bundle(path, basedir=basedir)
  File "/home/runner/.local/lib/python3.10/site-packages/competitive_verifier/oj/verify/languages/cplusplus.py", line 252, in bundle
    bundler.update(path)
  File "/home/runner/.local/lib/python3.10/site-packages/competitive_verifier/oj/verify/languages/cplusplus_bundle.py", line 482, in update
    self.update(
  File "/home/runner/.local/lib/python3.10/site-packages/competitive_verifier/oj/verify/languages/cplusplus_bundle.py", line 477, in update
    raise BundleErrorAt(
competitive_verifier.oj.verify.languages.cplusplus_bundle.BundleErrorAt: daylight/base.hpp: line 103: unable to process #include in #if / #ifdef / #ifndef other than include guards
Back to top page