首页 > 代码库 > hdu 4920 Matrix multiplication(矩阵乘法)
hdu 4920 Matrix multiplication(矩阵乘法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4920
Matrix multiplication
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 989 Accepted Submission(s): 396
Problem Description
Given two matrices A and B of size n×n, find the product of them.
bobo hates big integers. So you are only asked to find the result modulo 3.
bobo hates big integers. So you are only asked to find the result modulo 3.
Input
The input consists of several tests. For each tests:
The first line contains n (1≤n≤800). Each of the following n lines contain n integers -- the description of the matrix A. The j-th integer in the i-th line equals Aij. The next n lines describe the matrix B in similar format (0≤Aij,Bij≤109).
The first line contains n (1≤n≤800). Each of the following n lines contain n integers -- the description of the matrix A. The j-th integer in the i-th line equals Aij. The next n lines describe the matrix B in similar format (0≤Aij,Bij≤109).
Output
For each tests:
Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
Sample Input
1 0 1 2 0 1 2 3 4 5 6 7
Sample Output
0 0 1 2 1
Author
Xiaoxu Guo (ftiasch)
Source
2014 Multi-University Training Contest 5
Recommend
We have carefully selected several similar problems for you: 4919 4918 4917 4916 4915
代码如下:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 801; const int mod = 3; int A[MAXN][MAXN], B[MAXN][MAXN]; int C[MAXN][MAXN]; int n; void input() { int i, j; for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { scanf("%d",&A[i][j]); A[i][j] %= mod; } } for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { scanf("%d",&B[i][j]); B[i][j] %= mod; } } } void multi() {//两个相等矩阵的乘法,对于稀疏矩阵,有在0处不用运算的优化 memset(C,0,sizeof(C)); for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(A[i][j] == 0)//稀疏矩阵优化 continue; for(int k = 1; k <= n; k++) { C[i][k] += A[i][j]*B[j][k];//i行k列第j项 // C[i][k] %= mod; } } } } void print()//输出矩阵信息 { for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(j == 1) printf("%d",C[i][j]%mod); else printf(" %d",C[i][j]%mod); } printf("\n"); } } int main() { while(~scanf("%d",&n)) { input(); multi(); print(); } return 0; }
加输入外挂代码如下:(要快上一些)
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 817; const int mod = 3; int A[MAXN][MAXN], B[MAXN][MAXN]; int C[MAXN][MAXN]; int n; int Scan() { int res = 0, ch; ch=getchar(); if(ch >= '0' && ch <= '9') res = ch - '0'; while((ch = getchar()) >= '0' && ch <= '9' ) res = res * 10 + ch - '0'; return res; } void input() { int i, j; for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { //scanf("%d",&A[i][j]); //A[i][j] %= mod; A[i][j]=Scan()%3; } } for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { //scanf("%d",&B[i][j]); //B[i][j] %= mod; B[i][j]=Scan()%3; } } } void multi() {//两个相等矩阵的乘法,对于稀疏矩阵,有在0处不用运算的优化 memset(C,0,sizeof(C)); for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(A[i][j] == 0)//稀疏矩阵优化 continue; for(int k = 1; k <= n; k++) { C[i][k] += A[i][j]*B[j][k];//i行k列第j项 // C[i][k] %= mod; } } } } void print()//输出矩阵信息 { for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { if(j == 1) printf("%d",C[i][j]%mod); else printf(" %d",C[i][j]%mod); } printf("\n"); } } int main() { while(~scanf("%d",&n)) { input(); multi(); print(); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。