专栏文章

题解:P1001 A+B Problem

P1001题解参与者 34已保存评论 37

文章操作

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

当前评论
37 条
当前快照
1 份
快照标识符
@mipcx8v4
此快照首次捕获于
2025/12/03 09:57
3 个月前
此快照最后确认于
2025/12/03 09:57
3 个月前
查看原文
怎么不写矩阵乘法?
首先我们需要知道矩阵乘法,两个矩阵 AABB 相乘的结果是 CC
我们设 Ai,jA_{i,j} 表示 AA 矩阵的第 ii 行第 jj 个元素,Bi,jB_{i,j} 表示 BB 矩阵的第 ii 行第 jj 个元素,那么有公式 Ci,j=kAi,k×Bk,jC_{i,j}=\sum_k A_{i,k} \times B_{k,j}
好的,相信聪明的你已经学会了矩阵乘法,再来看看这个题,我们可以令 AA 矩阵是 [11]\begin{bmatrix} 1 & 1 \end{bmatrix}BB 矩阵是 [ab]\begin{bmatrix} a \\ b\end{bmatrix} 那么 A×BA\times B 的结果就是 [a+b000]\begin{bmatrix} a + b & 0\\ 0 & 0\end{bmatrix} 了。
代码:
CPP
#include<iostream>

struct Matrix{
	int g[2][2];
	Matrix (){
		for(int i = 0;i < 2; ++ i){
			for(int j = 0;j < 2; ++ j){
				g[i][j] = 0;
			}
		}
	}
};
inline Matrix operator * (const Matrix & x,const Matrix & y){
	Matrix z;
	for(int i = 0;i < 2; ++ i){
		for(int j = 0;j < 2; ++ j){
			for(int k = 0;k < 2; ++ k){
				z.g[i][j] += x.g[i][k] * y.g[k][j];
			}
		}
	}
	return z;
}
int main(){
	Matrix A,B;
	int a,b;
	std::cin >> a >> b;
	A.g[0][0] = 1;
	A.g[0][1] = 1;
	B.g[0][0] = a;
	B.g[1][0] = b;
	A = A * B;
	std::cout << A.g[0][0];
	return 0;
}

评论

37 条评论,欢迎与作者交流。

正在加载评论...