Matrix multiplicationTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 3654 Accepted Submission(s): 1524
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.
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).
Output
For each tests:
Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
Sample Input
Sample Output
|
题意:给你两个矩阵,让你求它们相乘后对3取余后的新矩阵。
裸题??? FUCK,TLE到死啊。/(ㄒoㄒ)/~~
就因为多个对3取余,而且这个取余决定了代码的效率。。。
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
int N;
int x[801][801], y[801][801], z[801][801];
void init()
{
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
scanf("%d", &x[i][j]), x[i][j] %= 3;
}
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
scanf("%d", &y[i][j]), y[i][j] %= 3, z[i][j] = 0;
}
//对两个矩阵取余后 元素最大为2
}
void solve()
{
//memset(z, 0, sizeof(z));
for(int i = 0; i < N; i++)
{
for(int k = 0; k < N; k++)
{
if(x[i][k] == 0) continue;
for(int j = 0; j < N; j++)
z[i][j] = z[i][j] + x[i][k] * y[k][j];//最坏情况 不过3200 不用取余 取余会超时
}
}
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
if(j) printf(" ");
printf("%d", z[i][j] % 3);
}
printf("\n");
}
}
int main()
{
while(scanf("%d", &N) != EOF)
{
init();
solve();
}
return 0;
}