您的位置:首页 > 其它

HDU 4920 坑爹的矩阵乘法

2017-04-02 16:35 232 查看
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.

InputThe 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,Bij≤10 9).
OutputFor each tests: 

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


题意:

给你两个矩阵,求他们的乘积。

看似水题,其实坑题,算法大幅度优化基本是没有可能了,就是正常的矩阵乘法,由于是对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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: