题解-洛谷P8110 [Cnoi2021]矩阵

P8110 [Cnoi2021]矩阵




题解

  • 分析

    以样例\(1\)为例:

    3 0
    1 2 3
    4 5 6
    

    根据题意,\(A_{ij}=a_i\times b_j\),很容易得到:

    \[A= \begin{bmatrix} 4&5&6\\ 8&10&12\\ 12&15&18\\ \end{bmatrix} \]

    诶,有没有发现一个特殊的性质?

    矩阵\(A\)的行和列线性相关[1]!!!

    从而,矩阵\(A\)的秩\(r(A)=1\),于是有一个结论[2]

    \[A^k=\text{tr(A)}^{k-1}A \]

    其中,\(\text{tr(A)}\)称为矩阵\(A\)的迹,即\(A\)的主对角线上的元素之和(在这里即\(\sum_{i=1}^{n}a_ib_i\)

    那么,此题已解。

    \[\begin{aligned} Ans&=\text{tr(A)}^{k-1}\sum_{i=1}^{n}\sum_{j=1}^{n}{A_{ij}} \\&=(\sum_{i=1}^{n}a_ib_i)^{k-1}\sum_{i=1}^{n}\sum_{j=1}^{n}{a_i\cdot b_j} \\&=(\sum_{i=1}^{n}a_ib_i)^{k-1}\sum_{i=1}^{n}{a_i}\sum_{j=1}^{n}{b_j} \\&=(\sum_{i=1}^{n}a_ib_i)^{k-1}(\sum_{i=1}^{n}{a_i})\cdot(\sum_{j=1}^{n}{b_j}) \end{aligned} \]

    快速幂处理\((\sum_{i=1}^{n}a_ib_i)^{k-1}\)即可

    时间复杂度:\(O(n+\log k)\)

  • 代码

    #include<iostream>
    #include<cstdio>
    #define ll long long
    #define maxn 100010
    #define P(x) ((((x)%p)+p)%p)
    
    using namespace std;
    
    ll n,k,p=998244353,a[maxn],b[maxn],ans,mula,mulb,mulab;
    
    template<typename type>
    inline void read(type &x)
    {
        x=0;bool flag(0);char ch=getchar();
        while(!isdigit(ch)) flag^=ch=='-',ch=getchar();
        while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
        flag?x=-x:0;
    }
    
    template<typename type>
    inline void write(type x,bool mode)
    {
        x<0?x=-x,putchar('-'):0;static short Stack[50],top(0);
        do Stack[++top]=x%10,x/=10;while(x);
        while(top) putchar(Stack[top--]|48);
        mode?putchar('\n'):putchar(' ');
    }
    
    inline ll ksm(ll x,ll y)
    {
        ll res=1;
        while(y)
        {
            if(y&1) res=P(res*x);
            x=P(x*x);
            y>>=1;
        }
        return res;
    }
    
    signed main()
    {
        read(n),read(k);
        for(int i=1;i<=n;i++) read(a[i]),a[i]=P(a[i]),mula=P(mula+a[i]);
        for(int i=1;i<=n;i++) read(b[i]),b[i]=P(b[i]),mulb=P(mulb+b[i]),mulab=P(mulab+P(a[i]*b[i]));
        if(!k) {write(n,1);return 0;}
        ans=P(mula*mulb)*P(ksm(mulab,k-1));
        write(P(ans),1);
        return 0;
    }
    
    
  • 说明

    在线性代数里,矢量空间的一组元素中,若没有矢量可用有限个其他矢量的线性组合所表示,则称为线性无关或线性独立(linearly independent),反之称为线性相关(linearly dependent)。

    「链接:百度百科-线性相关

    简洁来说,你可以把一个矩阵看作一个变换,矩阵每一列看作一个向量,如:

    \[A= \begin{bmatrix} 4&5&6\\ 8&10&12\\ 12&15&18\\ \end{bmatrix} \]

    可以看作\(\begin{bmatrix} 4\\8\\12 \end{bmatrix}\)​,\(\begin{bmatrix} 5\\10\\15 \end{bmatrix}\)​,\(\begin{bmatrix} 6\\12\\18 \end{bmatrix}\)​这三个描述变换的向量在作用到原空间后形成的空间,由于一共有三列,故有三个坐标,这些向量位于三维空间,它们的作用可以描述为:将基向量\(\begin{bmatrix} 1\\0\\0 \end{bmatrix}\)\(\begin{bmatrix} 0\\1\\0 \end{bmatrix}\)\(\begin{bmatrix} 0\\0\\1 \end{bmatrix}\)分别移到它们所在的坐标。

    观察发现,\(\begin{bmatrix} 4\\8\\12 \end{bmatrix}\)\(\begin{bmatrix} 5\\10\\15 \end{bmatrix}\)\(\begin{bmatrix} 6\\12\\18 \end{bmatrix}\)这三个向量是共线的,因此整个三维空间在被它们作用后塌缩为一条直线(一维),因此矩阵\(A\)的秩「也就是\(A\)的线性无关的列(或行)的最大数目,即\(1\)」为\(1\)

    已知一个\(n\times n\)矩阵\(A\)的秩为\(1\),则\(A\)的所有列向量/行向量线性相关,此时由于这三个向量是成比例关系的,因此可以根据矩阵乘法的定义,将\(A\)拆解为一个\(n\times1\)的矩阵\(B\)和一个\(1\times n\)的矩阵\(C\)的乘积。

    以上面的矩阵\(A\)为例:

    \[\begin{aligned} A&= \begin{bmatrix} 4&5&6\\ 8&10&12\\ 12&15&18\\ \end{bmatrix} \\&= \begin{bmatrix} 1\\2\\3\\ \end{bmatrix} \times \begin{bmatrix} 4&5&6\\ \end{bmatrix} \end{aligned} \]

    \(B=\begin{bmatrix} 1\\2\\3\\ \end{bmatrix},C=\begin{bmatrix} 4&5&6\\ \end{bmatrix}\),则\(A=B\times C\)​​

    因此:

    \[\begin{aligned} A^n&=(B\times C)^n \\&= B\times C\times B\times C...B\times C \\&=B\times(C\times B)\times(C\times B)...\times C \\&=B\times(C\times B)^{n-1}\times C \end{aligned} \]

    我们知道,一个\(1\times n\)的矩阵乘一个\(n\times1\)的矩阵得到的是一个\(1\times1\)的矩阵,也就是一个数。

    故:

    \[\begin{aligned} C\times B&=\begin{bmatrix} 4&5&6\\ \end{bmatrix}\times\begin{bmatrix} 1\\2\\3\\ \end{bmatrix} \\&=4\times1+5\times2+6\times3 \\&=32 \end{aligned} \]

    我们便愉快地发现:

    \[A^n=32^{n-1}\times B\times C=32^{n-1}\times A \]

    \(32\)不正是矩阵\(A\)对角线的元素之和吗?

    证毕。




第一次写题解,如有不足,请谅解~


  1. 关于线性相关 ↩︎

  2. 关于这个结论的推导过程 ↩︎

posted @ 2022-07-21 18:23  凌云_void  阅读(55)  评论(0编辑  收藏  举报