1. 程式人生 > >藍橋杯 ADV-208 演算法提高 矩陣相乘

藍橋杯 ADV-208 演算法提高 矩陣相乘

問題描述
  小明最近在為線性代數而頭疼,線性代數確實很抽象(也很無聊),可惜他的老師正在講這矩陣乘法這一段內容。
  當然,小明上課打瞌睡也沒問題,但線性代數的習題可是很可怕的。
  小明希望你來幫他完成這個任務。

  現在給你一個ai行aj列的矩陣和一個bi行bj列的矩陣,
  要你求出他們相乘的積(當然也是矩陣)。
  (輸入資料保證aj=bi,不需要判斷)
輸入格式
  輸入檔案共有ai+bi+2行,並且輸入的所有數為整數(long long範圍內)。
  第1行:ai 和 aj
  第2~ai+2行:矩陣a的所有元素
  第ai+3行:bi 和 bj
  第ai+3~ai+bi+3行:矩陣b的所有元素


輸出格式
  輸出矩陣a和矩陣b的積(矩陣c)
  (ai行bj列)
樣例輸入
2 2
12 23
45 56
2 2
78 89
45 56
樣例輸出
1971 2356
6030 7141

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int a, b;
    cin >> a >> b;
    vector<vector<long long int> > A(a, vector<long long int>(b));
    for(int i = 0; i < a; i++)
        for(int j = 0; j < b; j++)
            cin >> A[i][j];
    int c, d;
    cin >> c >> d;
    vector<vector<long long int> > B(c, vector<long long int>(d));
    for(int i = 0; i < c; i++)
        for(int j = 0; j < d; j++)
            cin >> B[i][j];
    vector<vector<long long int> > C(a, vector<long long int>(d));
    for(int i = 0; i < a; i++) {
        for(int j = 0; j < d; j++) {
            C[i][j] = 0;
            for(int k = 0; k < b; k++)
                C[i][j] += A[i][k] + B[k][j];
            cout << C[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}