10pts 样例能过
查看原帖
10pts 样例能过
1446435
zhanghan1025楼主2025/1/8 12:38

呜呜呜,调了一下午还是只有10pts

求救

#include <iostream>
#include <vector>
using namespace std;

struct matrix {
	int all[101][101] = {};
	int sizes = 0;
	matrix() {
	}
	matrix(int n) {
		this->sizes = n;
	}
	matrix operator*(matrix other) {
		matrix ans{sizes};
		for (int i = 0; i < ans.sizes; i++) {
			for (int j = 0; j < ans.sizes; j++) {
				for (int k = 0; k < ans.sizes; k++) {
					ans.all[i][j] += all[i][k] * other.all[k][j];
				}
			}
		}
		return ans;
	}
};
matrix pow(matrix a, long long k) {
	if (k == 0) {
		matrix d{a.sizes};
		for (int i = 0; i < d.sizes; i++) {
			d.all[i][i] = 1;
		}
		return d;
	}
	if (k % 2 == 0) {
		return pow(a * a, k / 2);
	} else {
		return pow(a * a, (k - 1) / 2) * a;
	}
}

int main() {
	int n, k;
	cin >> n >> k;
	matrix all{n};
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> all.all[i][j];
		}
	}
	matrix a = pow(all, k);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cout << a.all[i][j] << " ";
		}
		cout << endl;
	}
}
2025/1/8 12:38
加载中...