akoj-1055-矩阵乘法
矩阵乘法 Time Limit:1000MS Memory Limit:65536K Description 矩阵乘法是线性代数中最基本的运算之一。 Input 输入包含多组数据。每组数据的格式如下: Output 对每一组输入数据,你的程序都要输出单独一行字符。 Sample Input
2 3
1 2 3
4 5 6
3 2
1 2
3 4
5 6
2 2
22 28
49 64
1 2
1 2
2 1
2
1
2 2
2 4
1 2
1 2
1 2
1 1
1
1 1
1
0 0
Sample Output
Yes
No
No
Hint 此题考察线性代数基本概念,请参阅线性代数教材。 Source 2009中科大ACM校赛-普及版 [Submit] [Go Back] [Status] [Discuss]
#include <stdio.h> #include <string.h> #define MAXN 101 int a[MAXN][MAXN], b[MAXN][MAXN], c[MAXN][MAXN], d[MAXN][MAXN]; int main() { int i, j, m, n, x, y, u, v, p; while ( ~scanf("%d%d", &m, &n)) { if ( m == 0 && n == 0 ) break; for ( i=0; i<m; i++ ) { for ( j=0; j<n; j++ ) { scanf("%d", &a[i][j]); } } scanf("%d%d", &x, &y); for ( i=0; i<x; i++ ) { for ( j=0; j<y; j++ ) { scanf("%d", &b[i][j]); } } scanf("%d%d", &u, &v); for ( i=0; i<u; i++ ) { for ( j=0; j<v; j++ ) { scanf("%d", &c[i][j]); } } if ( n != x || m != u || v != y ) { puts("No"); } else { for ( i=0; i<u; i++ ) { for ( j=0; j<v; j++ ) { d[i][j] = 0; for ( p=0; p<n; p++ ) { d[i][j] += a[i][p] * b[p][j]; } if ( d[i][j] != c[i][j] ) break; } } if ( i == u && j == v ) puts("Yes"); else puts("No"); } } return 0; } |