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
 
题意:给你两个矩阵,让你把它们相乘后输出%3后的结果。
思路:普通的矩阵乘法+优化能过的,还有一种思路是开bitset<1000>bt[3],ct[3],储存每一行mod3后为0,1,2的情况,那么1*1=1,1 *2=2,2*1=2,2*2=1.
代码一:普通矩阵乘法+优化
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<bitset>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef long double ldb;
#define inf 99999999
#define pi acos(-1.0)
#define MOD 3
int n,m;
int data[4][805][805]; void solve()
{
int i,j,k;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
data[3][i][j]=0;
}
}
for(i=0;i<n;i++){
for(k=0;k<m;k++){
if(data[1][i][k]>0){
for(j=0;j<m;j++){
data[3][i][j]=data[3][i][j]+data[1][i][k]*data[2][k][j];
}
}
}
}
} int main()
{
int i,j;
while(scanf("%d",&n)!=EOF)
{
m=n;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&data[1][i][j]);
data[1][i][j]%=3;
}
} for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&data[2][i][j]);
data[2][i][j]%=3;
}
} solve();
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(j<n-1)printf("%d ",data[3][i][j]%3);
else printf("%d\n",data[3][i][j]%3);
}
}
}
return 0;
}

代码二:用bitset

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<bitset>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef long double ldb;
#define inf 99999999
#define pi acos(-1.0)
#define MOD 3
#define maxn 805
bitset<1000>bt[maxn][3],ct[maxn][3]; int main()
{
int n,m,i,j,c;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++){
for(j=0;j<3;j++){
bt[i][j].reset();
ct[i][j].reset();
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
scanf("%d",&c);
bt[i][c%3].set(j);
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
scanf("%d",&c);
ct[j][c%3].set(i);
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
c=((bt[i][1]&ct[j][1]).count()+(bt[i][1]&ct[j][2]).count()*2+(bt[i][2]&ct[j][1]).count()*2+(bt[i][2]&ct[j][2]).count() )%3;
if(j==n)printf("%d\n",c);
else printf("%d ",c);
}
}
}
return 0;
}

hdu4920Matrix multiplication (矩阵,bitset)的更多相关文章

  1. HDU 4920 Matrix multiplication(bitset优化)

    题目链接 Matrix multiplication 求矩阵A和B相乘的结果. 因为答案只要对3取模,所以我们可以通过一些方法来加速计算. 我们对两个矩阵各开两个bitset,分别存储模3余1和模3余 ...

  2. HDU 4920 Matrix multiplication(bitset)

    HDU 4920 Matrix multiplication 题目链接 题意:给定两个矩阵,求这两个矩阵相乘mod 3 思路:没什么好的想法,就把0的位置不考虑.结果就过了.然后看了官方题解,上面是用 ...

  3. UVa 442 Matrix Chain Multiplication(矩阵链,模拟栈)

    意甲冠军  由于矩阵乘法计算链表达的数量,需要的计算  后的电流等于行的矩阵的矩阵的列数  他们乘足够的人才  非法输出error 输入是严格合法的  即使仅仅有两个相乘也会用括号括起来  并且括号中 ...

  4. Codeforces 781D Axel and Marston in Bitland 矩阵 bitset

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF781D.html 题目传送门 - CF781D 题意 有一个 n 个点的图,有 m 条有向边,边有两种类型: ...

  5. HDU 4920 Matrix multiplication(矩阵相乘)

    各种TEL,233啊.没想到是处理掉0的情况就能够过啊.一直以为会有极端数据.没想到居然是这种啊..在网上看到了一个AC的奇妙的代码,经典的矩阵乘法,仅仅只是把最内层的枚举,移到外面就过了啊...有点 ...

  6. Poj 3318 Matrix Multiplication( 矩阵压缩)

    Matrix Multiplication Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 18928   Accepted: ...

  7. HDU 4920 Matrix multiplication 矩阵相乘。稀疏矩阵

    Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

  8. POJ 3318 Matrix Multiplication(矩阵乘法)

    题目链接 题意 : 给你三个n维矩阵,让你判断A*B是否等于C. 思路 :优化将二维转化成一维的.随机生成一个一维向量d,使得A*(B*d)=C*d,多次生成多次测试即可使错误概率大大减小. #inc ...

  9. UVA442 Matrix Chain Multiplication 矩阵运算量计算(栈的简单应用)

    栈的练习,如此水题竟然做了两个小时... 题意:给出矩阵大小和矩阵的运算顺序,判断能否相乘并求运算量. 我的算法很简单:比如(((((DE)F)G)H)I),遇到 (就cnt累计加一,字母入栈,遇到) ...

随机推荐

  1. Approach for Unsupervised Bug Report Summarization 无监督bug报告汇总方法

    AUSUM: approach for unsupervised bug report summarization 1. Abstract 解决的bug被归类以便未来参考 缺点是还是需要手动的去细读很 ...

  2. oop的三大特性和传统dom如何渲染

    OOP的三大特性是什么: 封装 :就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系继承:子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写.继承增加了 ...

  3. 【Flutter】可滚动组件简介

    前言 当组件内容超过当前显示视口(ViewPort)时,如果没有特殊处理,Flutter则会提示Overflow错误.为此,Flutter提供了多种可滚动组件(Scrollable Widget)用于 ...

  4. /usr/local/mysql/bin/mysqlbinlog -vv /var/lib/bin/mysql-bin.000008 --base64-output=DECODE-ROWS --start-pos=307

    /usr/local/mysql/bin/mysqlbinlog -vv /var/lib/bin/mysql-bin.000008 --base64-output=DECODE-ROWS  --st ...

  5. 【Oracle】delete表后commit后怎么找回,方法

    有些时候,不小心删除了一些需要的表,而且数据库不能停止,只能一直运行下去,这样的话很麻烦 下面介绍的方法就是删除表后通过时间戳后者scn找回删除的数据 模拟实验环境: 创建一个新表 SQL> c ...

  6. Ubuntu源、Python虚拟环境及pip源配置

    Ubuntu 命令行更改源 在修改source.list前,最好先备份一份 软件源的地址配置文件在 /etc/apt/sources.list 执行备份命令 sudo cp /etc/apt/sour ...

  7. flask文件下载

    后端的代码 # coding:utf-8 from flask import Flask app = Flask(__name__) @app.route("/upload", m ...

  8. VMware中安装Ubuntu后,安装VMwareTools提示“Not enough free space to extract VMwareTools-10.3.10-13959562.tar.gz”的解决办法

    将加载后的Vmware Tools中的*.tar.gz文件复制到桌面后提取,否则会报错:

  9. LoadRunner监控Centos和Ubuntu资源之服务器配置

    Centos 我用的版本是Centos6.8   首先更新源以及基础操作我就不说了,直接上步骤: Step 1 安装相关程序 执行命令:yum install inetd,这一步是为了安装rstatd ...

  10. Win+R 快速启动程序

    将某个程序的可执行C:\Program Files\Oracle\VirtualBox\VirtualBox.exe 或其快捷键 放入 某个自建的快捷键集合文件夹,可以自定义命名 如 vb 将其添加到 ...