Matrix multiplication
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 3376 Accepted Submission(s): 1414
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
题意:两个n*n矩阵相乘,输出相乘后的矩阵。
思路:普通方法一般来说是超时的,我们可以先将一个矩阵转置。然后再相乘。
注意:结果要%3。所以一开始直接先%3.后来再%3.
#include <stdio.h>
#include <cmath>
#include <vector>
#include <map>
#include <time.h>
#include <cstring>
#include <set>
#include<iostream>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
#define inf 0x6f6f6f6f
#define mod 10
int a[805][805];
int b[805][805];
int c[805][805];
int main()
{
int n,i,j,k;
while(cin>>n)
{
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
scanf("%d",&a[i][j]);
a[i][j]%=3;
}
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
scanf("%d",&b[j][i]);
b[j][i]%=3;
}
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
{
c[i][j]=0;
for(k=1; k<=n; k++)
{
c[i][j]+=a[i][k]*b[j][k];
}
if(j<n) //一个一个输出,减少时间。
printf("%d ",c[i][j]%3);
else
printf("%d\n",c[i][j]%3);
}
}
return 0;
}