Matrix multiplication
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 4338 Accepted Submission(s): 1736
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
题目大意:
就是求两个 n∗n 的矩阵相乘。
解题思路:
这个题 正常写的话 应该不会过 肯定会超时的,所以要将矩阵进行转置这样就会过了,我还有一个问题(问题在代码中有提到),如果有人知道 欢迎来帮我解决!!! /叩谢
My Code:
/**
2016 - 09 - 15 下午
Author: ITAK
Motto:
今日的我要超越昨日的我,明日的我要胜过今日的我,
以创作出更好的代码为目标,不断地超越自己。
**/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#include <set>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const int INF = 1e9+5;
const int MAXN = 800+5;
const int MOD = 3;
const double eps = 1e-7;
const double PI = acos(-1);
using namespace std;
int Scan_Int()///输入外挂
{
int res=0,ch,flag=0;
if((ch=getchar())=='-')
flag=1;
else if(ch>='0'&&ch<='9')
res=ch-'0';
while((ch=getchar())>='0'&&ch<='9')
res=res*10+ch-'0';
return flag?-res:res;
}
LL Scan_LL()///输入外挂
{
LL res=0,ch,flag=0;
if((ch=getchar())=='-')
flag=1;
else if(ch>='0'&&ch<='9')
res=ch-'0';
while((ch=getchar())>='0'&&ch<='9')
res=res*10+ch-'0';
return flag?-res:res;
}
void Out(int a)///输出外挂
{
if(a>9)
Out(a/10);
putchar(a%10+'0');
}
int a[MAXN][MAXN], b[MAXN][MAXN];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
scanf("%d",&a[i][j]), a[i][j] = a[i][j] % MOD;
/// 矩阵乘法 一定要转置
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
scanf("%d",&b[j][i]), b[j][i] = b[j][i] % MOD;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
int tmp = 0;
for(int k=0; k<n; k++)
///if(a[i][k] && b[j][k]) 为什么加上这句话不过,我很蒙逼
tmp += a[i][k]*b[j][k];
if(j == 0)
printf("%d",tmp%MOD);
else
printf(" %d",tmp%MOD);
}
puts("");
}
}
return 0;
}