一个极短,极好记,常数小的行列式求值模板——qyy 行列式

来源:之前看 qyy 在洛谷的板子题上交了一个写的特别优美,特别短小精悍的行列式求值,某天需要做一个用矩阵树定理的题,就学习了一下,并自行进行了简单的卡常改进。

我暂且把它叫做亓爷爷行列式。

特别优美,改进后常数也较小,最重要的是短而好记啊!交模板题的时候算上输入输出也只有 600b,算是用时和代码长度都较优的一个版本。

Mod 是模数,Array_Size 表示数组大小。

成品:

int Mod;

int det(int a[][Array_Size], int n) {
	int res = 1;
	for(int k = 1; k <= n && res; res = 1ll * res * a[k][k] % Mod, ++k)
		for(int i = k + 1, c; i <= n; ++i) {
			while(a[k][k]) {
				c = a[i][k] / a[k][k];
				for(int j = k; j <= n; ++j)
					a[i][j] = (a[i][j] + 1ll * (Mod - c) * a[k][j]) % Mod;
				std::swap(a[i], a[k]), res = Mod - res;
			}
			std::swap(a[i], a[k]), res = Mod - res; 
		}
	return res;
}
原文地址:https://www.cnblogs.com/zimujun/p/15505235.html