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.
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).
Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
1 0 1 2 0 1 2 3 4 5 6 7
0 0 1 2 1
题意:
给你两个矩阵,求他们的乘积。
看似水题,其实坑题,算法大幅度优化基本是没有可能了,就是正常的矩阵乘法,由于是对3取余,结果无非0,1,2,
假设A X B ==C
在A和B输入的时候就对3取余,计算时A中为0的元素直接C就得0,省去一部分时间,C在计算时不要取余,最后得到结果在取余
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
int a[805][805],b[805][805],c[805][805];
int main()
{
int n;
while(scanf("%d",&n)!=-1)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{scanf("%d",&a[i][j]);a[i][j]%=3;}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{scanf("%d",&b[i][j]);b[i][j]%=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++)
{ if(a[i][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!=n-1)
printf("%d ",c[i][j]%3);
else printf("%d",c[i][j]%3);
printf("\n");
}
}
return 0;
}