站外题求助
  • 板块学术版
  • 楼主ouxiyao
  • 当前回复12
  • 已保存回复12
  • 发布时间2025/7/26 18:47
  • 上次更新2025/7/27 09:57:39
查看原帖
站外题求助
1155764
ouxiyao楼主2025/7/26 18:47

题目:给出一个 n×nn\times n 的矩阵 AA 和一个正整数 kk,求 S=A+A2+A3+......+AkS=A+A^2+A^3+......+A^k。矩阵中的每个数对 mm 取模。
数据范围:1n301\leq n \leq 301k1091\leq k \leq 10^91m1041\leq m \leq 10^4。每个数不大于 3276832768。 代码(TLE):

#include<bits/stdc++.h>
using namespace std;
struct matrix{
	int c[32][32];
	matrix(){memset(c,0,sizeof(c));}
	void cch(){for(int i = 0;i<32;i++)c[i][i] = 1;}
}a,aans,t;
int n,m,k;
matrix operator+(matrix x,matrix y){
	matrix z;
	for(int i = 1;i<=n;i++)
		for(int j = 1;j<=n;j++)
			z.c[i][j] = (x.c[i][j]+y.c[i][j])%m;
	return z;
}
matrix operator*(matrix x,matrix y){
	matrix z;
	for(int i = 1;i<=n;i++)
		for(int j = 1;j<=n;j++)
			for(int k = 1;k<=n;k++)
				z.c[i][j] = (z.c[i][j]+x.c[i][k]*y.c[k][j])%m;
	return z;
}
int main(){
	cin.tie(0)->sync_with_stdio(0);
	cout.tie(0);
	cin>>n>>k>>m;
	for(int i = 1;i<=n;i++)for(int j = 1;j<=n;j++)cin>>a.c[i][j];
	t.cch();
	for(int i = 1;i<=k;i++){
		t = t*a;
		aans = aans+t;
	}
	for(int i = 1;i<=n;i++){
		for(int j = 1;j<=n;j++)cout<<aans.c[i][j]<<' ';
		cout<<'\n';
	}
	return 0;
}
2025/7/26 18:47
加载中...