1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 行列計算メニュー(言語選択)
  4. 問題一覧 C++編
  5. 行列の掛け算 C++編

行列計算メニューのサムネイル
行列の掛け算 C++編(paizaランク A 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

H_a 行 W_a 列の行列 A と H_b 行 W_b 列の行列 B が与えられます。
ただし、W_a = H_b であることが保証されます。
行列 A, B, C は i 行 j 列目の要素がそれぞれ a_{i, j}, b_{i, j}, c_{i, j} である行列です。
行列 A に行列 B を掛けることで得られる行列 C は次のように定義されます。



簡単に説明すると、得られる行列 C は次のような行列です。
・行列 A に行列 B を掛けた結果は H_a 行 W_b 列の行列になります
・行列 C の要素 c_{i, j} は A の i 行目をベクトルとみなしたもの(行ベクトル)と、B の j 列目をベクトルとみなしたもの(列ベクトル) の内積となります
・例えば、C_{1, 2} は A の 1 行目の行ベクトルと B の 2 列目の列ベクトルの内積となります。


行列 A に B を掛けた結果となる行列 C を計算してください。

入力例 1 で与えられる行列 A, B と掛け算の結果得られる行列 C は次のようになります。
C_{1, 1} は A の 1 行目の行ベクトル (3, 1) と B の 1 列目の列ベクトル (1, 2) の内積 5 となります。
C_{1, 2} は A の 1 行目の行ベクトル (3, 1) と B の 2 列目の列ベクトル (0, 1) の内積 1 となります。
C_{1, 3} は A の 1 行目の行ベクトル (3, 1) と B の 3 列目の列ベクトル (-4, 3) の内積 -9 となります。



入力例 2 で与えられる行列 A, B と掛け算の結果得られる行列 C は次のようになります。
A の 1 行目の行ベクトル (1, 2, 3) と B の 1 列目の列ベクトル (2, -2, 10) の内積 28 となります。



入力例 3 で与えられる行列 A, B と掛け算の結果得られる行列 C は次のようになります。



入力例 4 で与えられる行列 A, B と掛け算の結果得られる行列 C は次のようになります。

入力される値

H_a W_a H_b W_b
a_{1,1} a_{1,2} ... a_{1,W_a}
a_{2,1} a_{2,2} ... a_{2,W_a}
...
a_{H_a,1} a_{H_a,2} ... a_{H_a,W_a}
b_{1,1} b_{1,2} ... b_{1,W_b}
b_{2,1} b_{2,2} ... b_{2,W_b}
...
b_{H_b,1} b_{H_b,2} ... b_{H_b,W_b}


・1 行目では行列 A, B それぞれ 行数と列数 H_a, W_a, H_b, W_b が空白区切りで与えられます。
・次の H_a 行では行列 A の要素 a_{i, j} が、行ごとに空白区切りで与えられます。
・次の H_b 行では行列 B の要素 b_{i, j} が、行ごとに空白区切りで与えられます。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

行列 A と行列 B を掛けた結果となる行列 C を次のフォーマットに従って出力してください。

c_{1,1} c_{1,2} ... c_{1,W_b}
c_{2,1} c_{2,2} ... c_{2,W_b}
...
c_{H_a,1} c_{H_a,2} ... c_{H_a,W_b}

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件

すべてのテストケースにおいて, 以下の条件をみたします

・入力はすべて整数
・W_a = H_b であるケースのみが与えられる
・1 ≦ H_a, W_a, H_b, W_b ≦ 100
・-10^3 ≦ a_{i, j} ≦ 10^3 (1 ≦ i ≦ H_a, 1 ≦ j ≦ W_a)
・-10^3 ≦ b_{i, j} ≦ 10^3 (1 ≦ i ≦ H_b, 1 ≦ j ≦ W_b)

入力例1

1 2 2 3
3 1
1 0 -4
2 1 3

出力例1

5 1 -9

入力例2

1 3 3 1
1 2 3
2
-2
10

出力例2

28

入力例3

2 1 1 3
1
2
-1 0 2

出力例3

-1 0 2
-2 0 4

入力例4

4 4 4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

出力例4

0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

問題一覧へ戻る

ページの先頭へ戻る