【ブルーブリッジカップトレーニング問題】マトリクス乗算
1245 ワード
アルゴリズムトレーニングマトリクス乗算
時間制限:1.0 sメモリ制限:512.0 MB
問題の説明
m*s,s*nサイズの2つのマトリクスを入力します.2つのマトリクスを乗算した結果を出力します.
入力フォーマット
1行目、スペースで区切られた3つの正の整数m,s,n(いずれも200を超えない).
次にm行、各行s個のスペースで区切られた整数は、マトリクスA(i,j)を表す.
次のs行は、各行n個のスペースで区切られた整数で、行列B(i,j)を表す.
出力フォーマット
m行、各行n個のスペースで区切られた整数は、乗算された行列C(i,j)の値を出力する.
サンプル入力
2 3 2
1 0 -1
1 1 -3
0 3
1 2
3 1
サンプル出力
-3 2
-8 2
ヒント
行列Cは、行列Aのi番目の行ベクトルと行列Bのj番目の列ベクトルとの積に等しいm行n列であるべきである.
例えば、C(1,1)=(1,0,-1)*(0,1,3)=1*0+0*1+(-1)*3=-3
時間制限:1.0 sメモリ制限:512.0 MB
問題の説明
m*s,s*nサイズの2つのマトリクスを入力します.2つのマトリクスを乗算した結果を出力します.
入力フォーマット
1行目、スペースで区切られた3つの正の整数m,s,n(いずれも200を超えない).
次にm行、各行s個のスペースで区切られた整数は、マトリクスA(i,j)を表す.
次のs行は、各行n個のスペースで区切られた整数で、行列B(i,j)を表す.
出力フォーマット
m行、各行n個のスペースで区切られた整数は、乗算された行列C(i,j)の値を出力する.
サンプル入力
2 3 2
1 0 -1
1 1 -3
0 3
1 2
3 1
サンプル出力
-3 2
-8 2
ヒント
行列Cは、行列Aのi番目の行ベクトルと行列Bのj番目の列ベクトルとの積に等しいm行n列であるべきである.
例えば、C(1,1)=(1,0,-1)*(0,1,3)=1*0+0*1+(-1)*3=-3
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int m,s,n;
cin>>m>>s>>n;
int a[m+1][s+1];
int b[s+1][n+1];
int c[m+1][n+1];
memset(c,0,sizeof(c));
int i,j,k;
for(i=1;i<=m;i++)
for(j=1;j<=s;j++)
cin>>a[i][j];
for(i=1;i<=s;i++)
for(j=1;j<=n;j++)
cin>>b[i][j];
for(k=1;k<=s;k++)
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
c[i][j]+=a[i][k]*b[k][j];
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
cout<<c[i][j];
if(j!=n)
cout<<" ";
}
cout<<endl;
}
}