Matrix multiplication
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 3989 Accepted Submission(s): 1624
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 A ij. The next n lines describe the matrix B in similar format (0≤A ij,B ij≤10 9).
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 A ij. The next n lines describe the matrix B in similar format (0≤A ij,B ij≤10 9).
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
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4920
题意:就是两个矩阵相乘。
PS:这题原来最先在微信上看到别人的题解,主要解决超时,看了他的思路来写,还是超时,最后又在网上找了别人的代码看了一下,原来是这题的数据有点多,用cin和cout超时。
AC代码
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define MAXN 805
int a[MAXN][MAXN],b[MAXN][MAXN],c[MAXN][MAXN];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int x;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
//cin>>x;
scanf("%d",&x);
a[i][j]=x%3;
}
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
//cin>>x;
scanf("%d",&x);
b[i][j]=x%3;
}
memset(c,0,sizeof(c));
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
for(int k=0; k<n; k++)
{
c[i][j]+=a[i][k]*b[k][j];
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(j)
printf(" ");
//cout<<" ";
//cout<<c[i][j]%3;
printf("%d",c[i][j]%3);
}
//cout<<endl;
printf("\n");
}
}
return 0;
}