数学随记

...的就是还鸽着的。

啊啊啊啊啊啊更不动了。

参考博客:gzy_cjoier

木示木干 orz

前言

随心所欲。

组合数

  • \({n\choose k}\times k^{\underline{m}}={n-m\choose k-m}\times n^{\underline{m}}\)

组合数下降幂相乘有优美的性质(虽然看起来没啥用)。

  • \(\overset{n}{\underset{i=m}{\sum}}{i\choose m}={n+1\choose m+1}\)

希望看到这个式子能迅速反应,而不是想半天的杨辉三角。

其实还存在组合意义,考虑 \(n+1\) 个球分给 \(m+1\) 个人,用隔板法暴力求解就是 LHS,加个板,加个球表示最后一个位置隔出来的不要,就是 RHS。

  • \(\binom{n}{m} =[n\&m=m]\pmod{2}\)

其中& 表示按位与,用卢卡斯定理即可得证,此时是 \(O(1)\) 求解。

第一类斯特林数

定义

第一类斯特林数 \(s(n,m)\) 表示将 \(n\) 个不同元素构成 \(m\) 个圆排列的方案数,记为 \(\begin{bmatrix}n\\ m \end{bmatrix}\)

有递推公式:

\[\begin{bmatrix}n\\ m \end{bmatrix}=\begin{bmatrix}n-1\\ m-1 \end{bmatrix} +(n-1)\times \begin{bmatrix}n-1\\ m \end{bmatrix} \]

性质

性质1

第一类斯特林数可以和阶乘扯上关系。

\[n!=\sum_{i=0}^n\begin{bmatrix}n\\ i \end{bmatrix} \]

性质2

下降幂。

\[x^{\underline{n}}=\sum_{i=0}^n (-1)^{n-i}\begin{bmatrix}n\\ i \end{bmatrix} \]

性质3

上升幂。

\[x^{\overline{n}}=\sum_{i=0}^n\begin{bmatrix}n\\ i \end{bmatrix} x^i \]

第二类斯特林数

定义

第二类斯特林数 \(s(n,m)\) 表示将 \(n\) 个不同元素构成 \(m\) 个集合的方案数,记为 \(\begin{Bmatrix}n\\m\end{Bmatrix}\)

有递推公式:

\[\begin{Bmatrix}n\\m\end{Bmatrix}=\begin{Bmatrix}n-1\\m-1\end{Bmatrix}+m\times \begin{Bmatrix}n-1\\m\end{Bmatrix} \]

边界:\(\begin{Bmatrix}0\\0\end{Bmatrix}=1\)

还有一个经典容斥:

\[\begin{Bmatrix}n\\m\end{Bmatrix}=\frac{1}{m!}\sum_{i=0}^{m}(-1)^i\binom{m}{i}(m-i)^n \]

性质

性质1

幂与阶乘、组合数、下降幂的转换。

\[n^m=\sum_{i=0}^m\begin{Bmatrix}m\\i\end{Bmatrix}\times i!\times \binom{n}{i} \]

我们可以用这个来求解自然数幂和:

\[\begin{aligned}S(n)&=\sum_{i=1}^n i^m\\&=\sum_{i=1}^n \sum_{j=0}^k \begin{Bmatrix}m\\j\end{Bmatrix}\cdot j!\cdot \binom{i}{j}\\&=\sum_{j=0}^k\begin{Bmatrix}m\\j\end{Bmatrix}\cdot j!\cdot \binom{n+1}{j+1}\end{aligned} \]

插值落泪 qwq

上面那个还可以写成:

\[n^m=\sum_{i=0}^m\begin{Bmatrix}m\\i\end{Bmatrix}\times n^{\underline{i}} \]

[省选联考 2020 A 卷] 组合数问题 用到。

\(To\ be\ continued.\)

拉格朗日插值

我们知道,对于横坐标互不相同的 \(n+1\) 个点,我们可以唯一确定一个 \(n\) 次多项式,那么我们如何求解呢?

高斯消元!显然这不够优秀,需要 \(O(n^3)\),而拉格朗日插值可以做到 \(O(n^2)\)

\(How\ can\ you\ make\ it?\)——DDG

普通版本

令这个多项式为 \(f(x)\),则其在横坐标为 \(k\) 时的值为:

\[\sum_{i=0}^ny_i\prod_{j\not=i} \frac{k-x_j}{x_i-x_j} \]

完全是构造嘛!我们把 \(x_i\) 代入进去,发现完全满足等于 \(y_i\) 的条件。

乍一看求需要逆元,所以是 \(O(n^2\log_2n)\) 的,但其实可以累计起来,最后求一次逆元。

时间复杂度是 \(O(n^2+n\log_2n)≈O(n^2)\)

代码
int qpow(int x,int y)
{
	int ret = 1;
	while(y){if(y & 1) ret = 1ll * ret * x % MOD;x = 1ll * x * x % MOD;y >>= 1;}
	return ret;
}


int main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	n = Read(); k = Read();
	for(int i = 1;i <= n;++ i) x[i] = Read(),y[i] = Read();
	for(int i = 1;i <= n;++ i)
	{
		int nm = y[i],tmp = 1;
		for(int j = 1;j <= n;++ j)
			if(i != j) nm = 1ll * nm * (k-x[j]) % MOD,tmp = 1ll * tmp * (x[i]-x[j]) % MOD;
		ans = (ans + 1ll * nm * qpow(tmp,MOD-2)) % MOD;
	}
	Put((ans+MOD)%MOD);
	return 0;
}

特殊版本

\(x\) 取值连续时的做法,可以达到 \(O(n)\)

我们把式子写出来就知道了,用 \(i\) 替换 \(x_i\)

\[\sum_{i=0}^ny_i\prod_{j\not=i} \frac{k-j}{i-j} \]

这个 \(\prod\) 里面的分子分母不是显然可以用类似阶乘的方法预处理吗?但是要注意正负号。

当然逆元也要预处理,不然就是 \(O(n\log_2n)\) 了。

重心拉格朗日插值...

\(To\ be\ continued.\)

克莱姆法则

用于手算未知数比较少的一次方程,不会证明。

比如说我们求 \(Ax=b\) 中的 \(x\),其中 \(A\)\(n\times n\) 的。

首先我们算 \(D_0=|A|\),如果 \(D_0=0\),显然没有唯一解或者压根就无解,因为 \(A\) 不满秩。

然后我们去用 \(b\) 替换 \(A\) 中的第 \(i\) 列,记变换后的矩阵为 \(A_i\),及它的行列式 \(D_i=|A_i|\),那么有 \(x_i=\frac{D_i}{D_0}\)

看上去是个很不错的形式,直接背/cy

min-max容斥

要不咱丢个式子就润?

\[\max(S)=\sum_{T\in S}(-1)^{|T|+1}\min(T)\\ \min(S)=\sum_{T\in S}(-1)^{|T|+1}\max(T)\\ \]

彳亍口巴,再扔个推广的式子。

\[Kthmax(S)=\sum_{T\in S}(-1)^{|T|-k}\binom{|T|-1}{k-1}\min(T) \]

如果不出意外,这里会有一道例题

posted @ 2021-07-28 22:21  皮皮刘  阅读(87)  评论(0编辑  收藏  举报