社区讨论

小萌新求助

P3390【模板】矩阵快速幂参与者 2已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@lobjbbdr
此快照首次捕获于
2023/10/29 21:56
2 年前
此快照最后确认于
2023/11/04 03:00
2 年前
查看原帖
求求卢工的各位大佬
我是个全WA的小萌新
但是就是看不出错误;
求求各位路过的大佬帮帮忙。
C
#include <bits/stdc++.h>
using namespace std;
static long long MOD = pow(10,9) + 7;
long long n;
struct matrake{
	long long A[101][101];
	matrake(){
		memset(A,0,sizeof(A));
	}
};
struct matrake time_up(struct matrake one,struct matrake two){
	struct matrake ans;
	for (int i = 0;i<n;i++){
		for (int j = 0;j<n;j++){
			for (int x = 0;x<n;x++){
				ans.A[i][j] = (ans.A[i][j] + ((one.A[i][x] * two.A[j][x]) % MOD)) % MOD;
				//cout << one.A[i][x] << " " << two.A[x][j] << "  x:" << i << "  y" << j << endl; 
			}
			//cout << ans.A[i][j] << " ";
		}
		//cout << endl;
	}
	//cout << endl;
	return ans;
}


int main(){
	long long k;
	cin >> n >> k;
	struct matrake temp;
	struct matrake ans;
	for (int i = 0;i<n;i++){
		for (int j = 0;j<n;j++){
			scanf("%lld",&temp.A[i][j]);
			ans.A[i][j] = temp.A[i][j];
		}
	}
	k --;
	while (k){
		//cout << k << endl;
		if (k & 1){
			ans = time_up(ans,temp);
			//cout << "yes" << endl << endl;
		}
		temp = time_up(temp,temp);
		k >>= 1;
	}
	
	for (int i = 0;i<n;i++){
		for (int j = 0;j<n;j++){
			cout << ans.A[i][j] << " ";
		}
		cout << endl;
	}
	
}

回复

5 条回复,欢迎继续交流。

正在加载回复...