【ブルーブリッジカップトレーニング問題】マトリクス乗算

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