题意:
题解:
附上代码:
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int MAXN=70;
struct node{
ll a[MAXN][MAXN];
};
node shu,ans,mp;
ll N;
ll n,kk,mod;
node matrix(node x,node y)
{
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
mp.a[i][j]=0;
for(int p=1;p<=N;p++){
mp.a[i][j]=(mp.a[i][j]+x.a[i][p]*y.a[p][j]+mod)%mod;
}
}
}
return mp;
}
void work(ll k)
{
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
ans.a[i][j]=0;
}
}
for(int i=1;i<=N;i++){
ans.a[i][i]=1;
}
node t=shu;
while(k){
if(k&1){
ans=matrix(ans,t);
}
k>>=1;
t=matrix(t,t);
}
}
int main()
{
scanf("%lld%lld%lld",&n,&kk,&mod);
N=2*n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%lld",&shu.a[i][j]);
}
shu.a[n+i][i]=shu.a[n+i][n+i]=1;
}
work(kk+1);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
ll a=ans.a[n+i][j]%mod;
if(i==j){
a=(a+mod-1)%mod;
}
printf("%lld%c",a,j==n?'\n':' ');
}
}
return 0;
}
本文深入探讨了矩阵快速幂算法的实现细节,通过具体代码示例展示了如何利用矩阵乘法和快速幂运算解决复杂问题。文章重点介绍了算法的题解思路,包括初始化矩阵、定义矩阵乘法函数以及实现快速幂过程。

831

被折叠的 条评论
为什么被折叠?



