题解:P1001 A+B Problem

· · 题解

怎么不写矩阵乘法?

首先我们需要知道矩阵乘法,两个矩阵 AB 相乘的结果是 C

我们设 A_{i,j} 表示 A 矩阵的第 i 行第 j 个元素,B_{i,j} 表示 B 矩阵的第 i 行第 j 个元素,那么有公式 C_{i,j}=\sum_k A_{i,k} \times B_{k,j}

好的,相信聪明的你已经学会了矩阵乘法,再来看看这个题,我们可以令 A 矩阵是 \begin{bmatrix} 1 & 1 \end{bmatrix}B 矩阵是 \begin{bmatrix} a \\ b\end{bmatrix} 那么 A\times B 的结果就是 \begin{bmatrix} a + b & 0\\ 0 & 0\end{bmatrix} 了。

代码:

#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;
}