• #100. 矩阵乘法


    #100. 矩阵乘法

    内存限制:256 MiB时间限制:2000 ms标准输入输出
    题目类型:传统评测方式:文本比较
    上传者: 匿名

    题目描述

    这是一道模板题。

    分别给定 n×p n imes pn×p 和 p×m p imes mp×m 的两个矩阵 A AA 和 B BB,求 A×B A imes BA×B。

    输入格式

    第一行三个正整数 n nn、p pp、m mm,表示矩阵的长宽。
    之后的 n nn 行,每行 p pp 个整数,表示矩阵 A AA。
    之后的 p pp 行,每行 m mm 个整数,表示矩阵 B BB。

    输出格式

    输出 n nn 行,每行 m mm 个整数,表示矩阵 A×B A imes BA×B,每个数模 109+7 10 ^ 9 + 7109​​+7 输出。

    样例

    样例输入

    3 4 5
    -2 -8 -9 8
    -10 0 6 -8
    -10 -6 6 9
    4 -7 5 -5 9
    10 -2 -10 5 5
    -3 -7 -3 8 -2
    -6 7 7 3 -2

    样例输出

    999999898 149 153 999999929 999999951
    999999997 999999979 999999883 74 999999921                                                                                                                                                   
    999999835 103 55 95 999999857

    数据范围与提示

    1≤n,p,m≤500, −109≤Ai,j,Bi,j≤109 1 leq n, p, m leq 500, -10 ^ 9 leq A_{i, j}, B_{i, j} leq 10 ^ 91n,p,m500, 109​​Ai,j​​,Bi,j​​109​​

    分类标签

     
     
     
    zhx说矩阵乘法的时候把k放在外面会有玄学优化?

    上面那个是k在外面的,貌似真有玄学优化?:astonished:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define LL long long 
    using namespace std;
    const int MAXN=1001;
    const int mod=1e9+7;
    inline int read()
    {
    	char c=getchar();int flag=1,x=0;
    	while(c<'0'||c>'9')	{if(c=='-')	flag=-1;c=getchar();}
    	while(c>='0'&&c<='9')	x=x*10+c-48,c=getchar();return x*flag;
    }
    int n,p,m;
    long long int a[MAXN][MAXN];
    long long int b[MAXN][MAXN];
    long long int c[MAXN][MAXN];
    int main()
    {
    	n=read();p=read();m=read();
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=p;j++)
    			a[i][j]=read(),a[i][j]=(a[i][j]%mod+mod)%mod;
    	for(int i=1;i<=p;i++)
    		for(int j=1;j<=m;j++)
    			b[i][j]=read(),b[i][j]=(b[i][j]%mod+mod)%mod;
    	for(int k=1;k<=p;k++)
    		for(int i=1;i<=n;i++)
    			for(int j=1;j<=m;j++)
    				c[i][j]=( c[i][j]+(a[i][k]*b[k][j])%mod )%mod;
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    			printf("%lld ",c[i][j]);
    		printf("
    ");
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    第六课 3. 外部表
    第六课 2 物化视图
    第六课 1.当有数据文件被误删除时如何恢复
    SQL常用(通用)操作_01
    SQL规范
    C# foreach和for比较
    C# 装箱与拆箱
    C#面向对象笔记
    winform防止输入法对扫码的干扰
    GIT安装包备用地址
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/7805848.html
Copyright © 2020-2023  润新知