题解-洛谷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=\tr(A)^{k-1}A
$$
其中,\tr(A)称为矩阵A的迹,即A的主对角线上的元素之和(在这里即\sum_{i=1}^{n}a_ib_i)
那么,此题已解。
$$
\begin{align} Ans&=\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{align}
$$
快速幂处理(\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;
}
-
说明
[1] 关于线性相关在线性代数里,矢量空间的一组元素中,若没有矢量可用有限个其他矢量的线性组合所表示,则称为线性无关或线性独立(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。
[2] 关于这个结论的推导过程已知一个n\times n矩阵A的秩为1,则A的所有列向量/行向量线性相关,此时由于这三个向量是成比例关系的,因此可以根据矩阵乘法的定义,将A拆解为一个n\times1的矩阵B和一个1\times n的矩阵C的乘积。
以上面的矩阵A为例:
$$
\begin{align} 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{align}
$$
记B=\begin{bmatrix} 1\\2\\3\\ \end{bmatrix},C=\begin{bmatrix} 4&5&6\\ \end{bmatrix},则A=B\times C
因此:
$$
\begin{align} 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{align}
$$
我们知道,一个1\times n的矩阵乘一个n\times1的矩阵得到的是一个1\times1的矩阵,也就是一个数。
故:
$$
\begin{align} 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{align}
$$
我们便愉快地发现:
$$
A^n=32^{n-1}\times B\times C=32^{n-1}\times A
$$
而32不正是矩阵A对角线的元素之和吗?
证毕。
第一次写题解,如有不足,请谅解~
[https://www.luogu.com.cn/problem/P8110]:
[https://www.luogu.com.cn/problem/P8110]:
[https://www.luogu.com.cn/problem/P8110]:
标签:begin,洛谷,题解,sum,P8110,矩阵,times,bmatrix,end 来源: https://www.cnblogs.com/lingyunvoid/p/16503017.html