码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 4920 Matrix multiplication(矩阵乘法)

时间:2014-08-05 22:38:50      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:hdu   矩阵乘法   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4920


Matrix multiplication

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 989    Accepted Submission(s): 396

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 Aij. The next n lines describe the matrix B in similar format (0≤Aij,Bij≤109).
 
Output
For 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
 
Author
Xiaoxu Guo (ftiasch)
 
Source
 
Recommend
We have carefully selected several similar problems for you:  4919 4918 4917 4916 4915 

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 801;
const int mod = 3;
int A[MAXN][MAXN], B[MAXN][MAXN];
int C[MAXN][MAXN];
int n;

void input()
{
    int i, j;
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= n; j++)
        {
            scanf("%d",&A[i][j]);
            A[i][j] %= mod;
        }
    }
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= n; j++)
        {
            scanf("%d",&B[i][j]);
            B[i][j] %= mod;
        }
    }
}

void multi()
{//两个相等矩阵的乘法,对于稀疏矩阵,有在0处不用运算的优化
    memset(C,0,sizeof(C));
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            if(A[i][j] == 0)//稀疏矩阵优化
                continue;
            for(int k = 1; k <= n; k++)
            {
                C[i][k] += A[i][j]*B[j][k];//i行k列第j项
            //    C[i][k] %= mod;
            }
        }
    }
}

void print()//输出矩阵信息
{
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            if(j == 1)
                printf("%d",C[i][j]%mod);
            else
                printf(" %d",C[i][j]%mod);
        }
        printf("\n");
    }
}

int main()
{
    while(~scanf("%d",&n))
    {
        input();
        multi();
        print();
    }
    return 0;
}

加输入外挂代码如下:(要快上一些)

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 817;
const int mod = 3;
int A[MAXN][MAXN], B[MAXN][MAXN];
int C[MAXN][MAXN];
int n;

int Scan()
{
	int res = 0, ch;
	ch=getchar();
	if(ch >= '0' && ch <= '9')		 
		res = ch - '0';
	while((ch = getchar()) >= '0' && ch <= '9' )
		res = res * 10 + ch - '0';
	return res;
}

void input()
{
	int i, j;
	for(i = 1; i <= n; i++)
	{
		for(j = 1; j <= n; j++)
		{
			//scanf("%d",&A[i][j]);
			//A[i][j] %= mod;
			A[i][j]=Scan()%3;
		}
	}
	for(i = 1; i <= n; i++)
	{
		for(j = 1; j <= n; j++)
		{
			//scanf("%d",&B[i][j]);
			//B[i][j] %= mod;
			B[i][j]=Scan()%3;
		}
	}
}

void multi()
{//两个相等矩阵的乘法,对于稀疏矩阵,有在0处不用运算的优化
	memset(C,0,sizeof(C));
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= n; j++)
		{
			if(A[i][j] == 0)//稀疏矩阵优化
				continue;
			for(int k = 1; k <= n; k++)
			{
				C[i][k] += A[i][j]*B[j][k];//i行k列第j项
			//	C[i][k] %= mod;
			}
		}
	}
}

void print()//输出矩阵信息
{
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= n; j++)
		{
			if(j == 1)
				printf("%d",C[i][j]%mod);
			else
				printf(" %d",C[i][j]%mod);
		}
		printf("\n");
	}
}

int main()
{
	while(~scanf("%d",&n))
	{
		input();
		multi();
		print();
	}
	return 0;
}


hdu 4920 Matrix multiplication(矩阵乘法),布布扣,bubuko.com

hdu 4920 Matrix multiplication(矩阵乘法)

标签:hdu   矩阵乘法   

原文地址:http://blog.csdn.net/u012860063/article/details/38390787

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!