首页 > 代码库 > POJ 3318 Matrix Multiplication(矩阵乘法)
POJ 3318 Matrix Multiplication(矩阵乘法)
题目链接
题意 : 给你三个n维矩阵,让你判断A*B是否等于C。
思路 :优化将二维转化成一维的。随机生成一个一维向量d,使得A*(B*d)=C*d,多次生成多次测试即可使错误概率大大减小。
1 //3318 2 #include <stdio.h> 3 #include <string.h> 4 #include <time.h> 5 #include <stdlib.h> 6 #include <iostream> 7 8 using namespace std ; 9 10 int a[1010][1010],b[1010][1010],c[1010][1010] ;11 int d[1010],c1[1010],d1[1010],ans[1010] ;12 13 int main()14 {15 int n ;16 while(~scanf("%d",&n))17 {18 for(int i = 0 ; i < n ; i++)19 for(int j = 0 ; j < n ; j++)20 scanf("%d",&a[i][j]) ;21 for(int i = 0 ; i < n ; i++)22 for(int j = 0 ; j < n ; j++)23 scanf("%d",&b[i][j]) ;24 for(int i = 0 ; i < n ; i++)25 for(int j = 0 ; j < n ; j++)26 scanf("%d",&c[i][j]) ;27 srand((unsigned int)time(0));28 for(int i=0; i<n; i++)29 {30 d[i]=rand()%100;31 }32 for(int i = 0 ; i < n ; i++)33 for(int j = 0 ; j < n ; j++)34 {35 d1[i] += b[i][j]*d[j] ;//二维乘一维等于一维,一维乘二维等于二维36 c1[i] += c[i][j]*d[j] ;37 }38 for(int i = 0 ; i < n ; i++)39 for(int j = 0 ; j < n ; j++)40 ans[i] += a[i][j]*d1[j] ;41 bool flag = false ;42 for(int i = 0 ; i < n ; i++)43 if(ans[i] != c1[i])44 {45 flag = true ;46 break ;47 }48 if(!flag)49 printf("YES\n") ;50 else printf("NO\n") ;51 }52 return 0 ;53 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。