社区讨论
未过样例求条
P10502Matrix Power Series参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mmdetvgn
- 此快照首次捕获于
- 2026/03/05 19:56 5 天前
- 此快照最后确认于
- 2026/03/07 18:40 3 天前
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod,n,k;
struct smatrix{
ll a[40][40],sn,sm;
smatrix(){memset(a,0,sizeof(a));sn = sm = 0;}
}I,Z,aa;
struct bmatrix{
smatrix b[40][40];
ll bn,bm;
bmatrix(){for(int i = 1;i<=39;i++)for(int j = 1;j<=39;j++)b[i][j] = Z;bn = bm = 0;}
}f,ans;
smatrix operator+(smatrix x,smatrix y){
smatrix z;
z.sn = x.sn,z.sm = x.sm;
for(int i = 1;i<=x.sn;i++)
for(int j = 1;j<=x.sm;j++)
z.a[i][j] = (x.a[i][j]+y.a[i][j])%mod;
return z;
}
smatrix operator*(smatrix x,smatrix y){
smatrix z;
z.sn = x.sn,z.sm = y.sm;
for(int i = 1;i<=x.sn;i++)
for(int j = 1;j<=y.sm;j++)
for(int k = 1;k<=x.sm;k++)
z.a[i][j] = (z.a[i][j]+x.a[i][k]*y.a[k][j])%mod;
return z;
}
bmatrix operator*(bmatrix x,bmatrix y){
bmatrix z;
for(int i = 1;i<=x.bn;i++)
for(int j = 1;j<=y.bm;j++)
for(int k = 1;k<=x.bm;k++)
z.b[i][j] = z.b[i][j]+x.b[i][k]*y.b[k][j];
z.bn = x.bn,z.bm = y.bm;
return z;
}
int main(){
cin.tie(0)->sync_with_stdio(0);
cout.tie(0);
cin>>n>>k>>mod;
aa.sn = aa.sm = I.sn = I.sm = Z.sn = Z.sm = n;
for(int i = 1;i<=n;i++)I.a[i][i] = 1;
for(int i = 1;i<=n;i++)
for(int j = 1;j<=n;j++)
cin>>aa.a[i][j];
f.b[1][1] = f.b[1][2] = I;
f.b[2][1] = Z,f.b[2][2] = aa;
f.bn = f.bm = 2;
ans.b[1][1] = aa,ans.b[2][1] = aa*aa;
ans.bn = 2,ans.bm = 1;
k--;
while(k){
if(k&1)ans = ans*f;
f = f*f;
k>>=1;
}
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++)cout<<ans.b[1][1].a[i][j]<<' ';
cout<<'\n';
}
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...