分享

清北NOIP训练营内部试题解析!

 长沙7喜 2020-10-07

解析在代码后面

#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');

}

解析:

令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=

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多