因为是模3,所以把原矩阵拆成两个01矩阵,然后按分配律拆开分别进行矩阵乘法,行列用bitset来存进行优化即可

注意

int bitset<int>::count() 函数可以统计bitset里有多少1

int bitset<int>::any() 函数可以统计bitset里是否有1 

/*
(A+B)*(C+D)=A*C+A*D+B*C+B*D
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 805
struct Matrix{int n; bitset<maxn>r[maxn];//按行表示 bitset<maxn>c[maxn];//按列表示
}A,B,C,D;
int E[maxn][maxn],F[maxn][maxn],G[maxn][maxn],H[maxn][maxn];
int n;void mul(Matrix A,Matrix B,int res[maxn][maxn]){bitset<maxn>tmp;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){tmp=A.r[i]&B.c[j];res[i][j]=tmp.count()%3; }
}int main(){while(cin>>n){A.n=B.n=C.n=D.n=n;for(int i=1;i<=n;i++){A.c[i].reset();A.r[i].reset();B.c[i].reset();B.r[i].reset();C.c[i].reset();C.r[i].reset();D.c[i].reset();D.r[i].reset(); } for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){int x;scanf("%d",&x);x%=3;if(x>=1){A.r[i][j]=1;A.c[j][i]=1;}if(x==2){B.r[i][j]=1;B.c[j][i]=1;}}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){int x;scanf("%d",&x);x%=3;if(x>=1){C.r[i][j]=1;C.c[j][i]=1;}if(x==2){D.r[i][j]=1;D.c[j][i]=1;}}mul(A,C,E);mul(A,D,F);mul(B,C,G);mul(B,D,H);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int ans=E[i][j]+F[i][j]+G[i][j]+H[i][j];if(j!=1)printf(" ");printf("%d",ans%3);}puts("");}    }
}

转载于:https://www.cnblogs.com/zsben991126/p/11182183.html

矩阵乘法分配律+bitset优化——hdu4920相关推荐

  1. 从矩阵乘法来看-O优化和ijk执行顺序对程序性能的影响

    从矩阵乘法来看-O优化和ijk执行顺序对程序性能的影响 根据计算矩阵乘积的c程序,主要想做想做两件事情: 统计采用不同的优化选项编译程序所用的时间,感受-O优化带来的性能提升. 看看矩阵乘法中不同循环 ...

  2. Codeforces 576D Flights for Regular Customers (图论、矩阵乘法、Bitset)

    题目链接 http://codeforces.com/contest/576/problem/D 题解 把边按\(t_i\)从小到大排序后枚举\(i\), 求出按前\((i-1)\)条边走\(t_i\ ...

  3. 【BZOJ 3326】[Scoi2013]数数 数位dp+矩阵乘法优化

    挺好的数位dp-- 先说一下我个人的做法: 经过观察,发现这题按照以往的思路从后往前递增,不怎么好推,然后我就大胆猜想,从前往后推,发现很好推啊,维护四个变量,从开始位置到现在有了i个数 f[i]:所 ...

  4. 程序性能优化探讨(6)——矩阵乘法优化之分块矩阵

    有一种性格叫做偏执,有一种矩阵优化运算叫做分块.实话说,也许我这辈子也用不上这种随牛B但很复杂的算法,有些版本的教材直接删除这个内容.但越是这样我越想不过,因此借写这篇博客,把分块矩阵乘法彻底分析清楚 ...

  5. 矩阵乘法计算速度再次突破极限,我炼丹能更快了吗?| 哈佛、MIT

    梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI n阶矩阵乘法最优解的时间复杂度再次被突破,达到了. 按定义直接算的话,时间复杂度是O(n³). 光这么说可能不太直观,从图上可以看出,n足够 ...

  6. 循环取矩阵的某行_1.2 震惊! 某大二本科生写的矩阵乘法吊打Mathematica-线性代数库BLAS-矩阵 (上)...

    本文是 1. 线性代数库BLAS​zhuanlan.zhihu.com 系列的第二篇, 将讲述矩阵类的结构和矩阵基础运算的AVX2加速算法. 1. 矩阵类的结构 在讲述矩阵各种算法之前很有必要详解一下 ...

  7. 稀疏矩阵加法运算_1.2 震惊! 某大二本科生写的矩阵乘法吊打Mathematica-线性代数库BLAS-矩阵 (上)...

    本文是 1. 线性代数库BLAS​zhuanlan.zhihu.com 系列的第二篇, 将讲述矩阵类的结构和矩阵基础运算的AVX2加速算法. 1. 矩阵类的结构 在讲述矩阵各种算法之前很有必要详解一下 ...

  8. DeepMind攻克50年数学难题!AlphaZero史上最快矩阵乘法算法登Nature封面

      新智元报道   编辑:David Joey [新智元导读]DeepMind碾压人类高手的AI围棋大师AlphaZero,下一个目标是数学算法!现已发现50年以来最快的矩阵乘法算法. 下围棋碾压人类 ...

  9. 如何在CPU上优化GEMM矩阵乘法

    如何在CPU上优化GEMM矩阵乘法 How to optimize GEMM on CPU (TL;DR) TVM 提供抽象接口,允许用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度 ...

最新文章

  1. redis 查看key的有效期_你经常忽略的Redis常见面试题,精选给你整理
  2. 大数据学习——Storm集群搭建
  3. 2019年全国各地房价排名50强
  4. es根据字段长度过滤_Es 根据数组长度查询
  5. 发布 .NET 5 带运行时单文件应用时优化文件体积的方法
  6. 设计模式之 里氏替换原则
  7. IntelliJ IDEA统计项目代码行数
  8. 独家!币安被盗原因找到了!7074 枚比特币竟是这样丢掉的
  9. Windows Server 2003成员服务器基准用户权限分配策略
  10. win10便签常驻桌面_win7和win10自带桌面便签哪里找
  11. 软件脱壳常见的几种方法
  12. 1467B. Hills And Valleys(思维模拟)
  13. Android系统体系结构
  14. glut glfw glad SOIL glm freetype等配置
  15. 第1143期AI100_机器学习日报(2017-11-04)
  16. 如何提高团队管理能力
  17. 《linux命令行与shell脚本编程大全》读书笔记第一、二章
  18. 满足一个小妹妹的需求——给她批量抓取动漫图片
  19. [附源码]计算机毕业设计springboot高校流浪动物领养网站
  20. 微软服务器无法连接,wsus无法连接同步微软更新服务器

热门文章

  1. 信安Note_day05
  2. 假外汇平台杀入币圈:反向喊单,篡改数据,股民成最大受害者
  3. ipxe服务器搭建笔记-ipxe基本语法
  4. 杰里之AC69 系列 K 歌宝的混响、MIC 和背景音量调节函数篇
  5. Postman入门到入土
  6. 藍牙耳機音質一定差? 瞭解音訊轉碼器來打破迷思
  7. ERC223及ERC827实现代码欠缺安全考虑 —— ATN Token中的CUSTOM_CALL漏洞深入分析
  8. 一张分辨率低模糊的图片有什么办法把它变的很清晰?
  9. python中的nan什么意思_python中的nan是什么意思
  10. 关于ABB机器人安全区设定案例