51nod1140 矩阵相乘结果的判断

51nod1140 矩阵相乘结果的判断
题意 判断 矩阵 A * B 是否等于 C

随机矩阵
若 A*B==C ----> X*(A*B) = X*C
但是反向不能推
这时我们 随机出一个行向量 X 看一下是否符合该要求,
因为 出题人不知道我们 随机的矩阵长什么样,所以这样 随机一次这个矩阵就应该够了

 

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <string>
 6 #include <algorithm>
 7 #include <iomanip>
 8 #include <iostream>
 9 #include <ctime> 
10 using namespace std ; 
11 
12 const int maxn = 501 ; 
13 int n ;
14 int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn],sum1[2][maxn],sum2[2][maxn],sum3[2][maxn]  ; 
15 int rnd[maxn][maxn] ; 
16 bool ok ; 
17 
18 using namespace std ; 
19 
20 int main() 
21 {
22     scanf("%d",&n) ; 
23     srand(time(0)) ;
24     for(int i=1;i<=n;i++) 
25         for(int j=1;j<=n;j++) scanf("%d",&a[ i ][ j ]) ;
26     for(int i=1;i<=n;i++) 
27         for(int j=1;j<=n;j++) scanf("%d",&b[ i ][ j ]) ;
28     for(int i=1;i<=n;i++) 
29         for(int j=1;j<=n;j++) scanf("%d",&c[ i ][ j ]) ;   
30     for(int i=1;i<=n;i++) rnd[1][i] = rand() % 17;
31     int i = 1 ; 
32         for(int j=1;j<=n;j++) 
33             for(int k=1;k<=n;k++) 
34                 sum1[i][j] += rnd[i][k] * a[k][j] ;  
35         for(int j=1;j<=n;j++) 
36             for(int k=1;k<=n;k++) 
37                 sum2[i][j] += sum1[i][k] * b[k][j] ; 
38          for(int j=1;j<=n;j++) 
39              for(int k=1;k<=n;k++) 
40                  sum3[i][j] += rnd[i][k]  * c[k][j] ; 
41     ok = 1 ;
42     for(int j=1;j<=n;j++) if(sum2[1][j] != sum3[1][j]) ok = false ;
43     if(ok) printf("Yes\n") ; 
44         else printf("No\n") ; 
45     
46     return 0 ;
47 }

 

posted @ 2017-06-01 14:42  third2333  阅读(241)  评论(0编辑  收藏  举报