# Array# Simulation# Basic Math

d481 - 矩陣乘法

🔗 前往 ZeroJudge 原題

題目描述

題目要求實作矩陣乘法。給定兩個矩陣,如果它們可以相乘(第一個矩陣的列數等於第二個矩陣的行數),則計算它們的乘積並輸出結果。如果矩陣無法相乘,則輸出 "Error"。

解題思路

這題的解題思路是直接根據矩陣乘法的定義進行計算。對於結果矩陣中的每個元素,需要將第一個矩陣的對應行與第二個矩陣的對應列進行點積運算。在計算之前,需要檢查兩個矩陣是否可以相乘,即第一個矩陣的列數是否等於第二個矩陣的行數。如果無法相乘,則輸出 "Error"。

複雜度分析

  • 時間複雜度: O(x * y * yy),其中 x 是第一個矩陣的行數,y 是第一個矩陣的列數,yy 是第二個矩陣的列數。這是因為對於結果矩陣中的每個元素,都需要進行 y 次乘法和加法運算。
  • 空間複雜度: O(x * 101 + 101 * 101),主要來自於儲存兩個輸入矩陣 a 和 b 的空間。

程式碼

#include <iostream>
using namespace std;
long long int a[101][101],b[101][101];
int x,y,xx,yy;
int main() {
	cin.tie(0);cin.sync_with_stdio(0);
	while(cin >> x >> y >> xx >> yy){
		if(y!=xx){
			cout << "Error\n";
			continue;
		}
		for(int i=0;i<x;++i){
			for(int j=0;j<y;++j){
				cin >> a[i][j];
			}
		}
		for(int i=0;i<xx;++i){
			for(int j=0;j<yy;++j){
				cin >> b[i][j];
			}
		}
		for(int i=0;i<x;++i){
			for(int j=0;j<yy;++j){
				long long int tmp=0;
				for(int k=0;k<y;++k){
					tmp+=a[i][k]*b[k][j];
				}
				cout << tmp << " ";
			}
			cout << '\n';
		}
	}
}

Discussion