HPU 矩阵乘法

来源:互联网 发布:水仙花数的算法流程图 编辑:程序博客网 时间:2024/05/19 03:41

点击打开链接


B - 矩阵乘法
Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu
Submit Status

Description

给定两个矩阵$A$和$B$,你需要判断它们是否可以相乘,若可以请输出相乘后的矩阵。

Input

第一行输入一个整数$T$,代表有$T$组测试数据。

每组数据第一行输入两个整数$N,M$,代表矩阵$A$的行、列。

接下来$N$行,每行输入$M$个整数$a[][]$。

之后一行输入两个整数$n,m$,代表矩阵$B$的行、列。

接下来$n$行,每行输入$m$个整数$b[][]$。

注:$1 <= T <= 500,1 <= N,m <= 100,1 <= M,n <= 10,1 <= $矩阵元素$<= 20$。

Output

若矩阵$A、B$可以相乘,先输出$YES$,再输出相乘得到的矩阵。

对每行的矩阵元素,每两个元素之间有一个空格,最后一个没有空格。

反之输出$NO$。

Sample Input

22 21 11 12 31 1 11 1 12 31 1 11 1 12 21 11 1 

Sample Output

YES2 2 22 2 2NO 


ps: 水题,但前提你得知道矩阵乘法的规律,WC了好几次,竟然错在YES没有大写,我们内心是崩溃的!!!

矩阵乘法样例:输入两个矩阵

2 3 1 0 -11 1 -3
3 20 31 23 1

矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。
例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3

此后类推


#include<stdio.h>#include<string.h>int main(){int a[210][210],b[210][210];int m,s1,s2,n,t,i,j,k;scanf("%d",&t);while(t--){int x=0;scanf("%d %d",&m,&s1);   for(i=0;i<m;i++)    for(j=0;j<s1;j++)      scanf("%d",&a[i][j]);         scanf("%d %d",&s2,&n) ;    for(i=0;i<s2;i++)    for(j=0;j<n;j++)      scanf("%d",&b[i][j]);          if(s1 != s2)   printf("NO\n");else{  printf("YES\n");   for(i=0; i<m; i++)   {    for(j=0; j<n; j++)     {     x = 0;     for(k=0; k<s1; k++)      {          x+=a[i][k]*b[k][j];      }         printf("%d",x);  if(j == n-1)  printf("\n");  else  printf(" ");               }         }     }}return 0;}


原创粉丝点击