期望得分:0+60+60=120
实际得分:0+30+60=90
令g=gcd(X11,X12,X13……)
则行列式可能为D的充要条件为g|D
1、g|D为必要条件:
由定义来算行列式的时候,每一项都要从第一行里取一个数,所以g|D
2、g|D为充分条件:
首先可以通过矩阵的初等变换,将矩阵X消成对角矩阵
其中,X11* X22 * X33* X44=D
上述矩阵等价于
把D拆为g*D/g
还原到矩阵中
即
X22=
此矩阵模拟先前初等变换即可还原为原矩阵X
#include <algorithm> #include <cstdio> #include <cstdlib> #include <iostream> #include <cmath> using namespace std; int gcd(int a,int b) { return !b ? a : gcd(b,a%b); } bool solve() { int n,m,x,y; scanf("%d%d",&n,&m); x=0; for (int i=1;i<=n;++i) { scanf("%d",&y); x=gcd(x,abs(y)); } if (n==1) return y==m; if (!x) return !m; return !(abs(m)%x); } int main() { freopen("det.in","r",stdin); freopen("det.out","w",stdout); int t; scanf("%d", &t); while(t--) if (solve()) printf("Y\n"); else printf("N\n"); }