因为是模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. linux获取最高权限并取消_Linux 更新glibc 漏洞 可以获取最高权限
  2. .NET(C#)时间日期字符串(String)格式化转换成Datetime异常报错问题
  3. 音游android平板,音游专题 - 有时候听歌远远不够,试试这些音游吧 - Android 应用 - 【最美应用】...
  4. pycharm打开脚本报错Gtk-Message: Failed to load module canberra-gtk-module
  5. MySql学习10-----存储过程和函数
  6. cvHoughLines2() 霍夫线变换
  7. mac设置windows文件服务器,苹果MAC访问Windows共享文件夹的技巧
  8. 使用Arctime生成各种格式的字幕文件
  9. 802.1Q帧的格式 与 VLAN的类型
  10. JS日历插件 - My97 DatePicker用法详解
  11. Burp Spider 使用指南
  12. find()的基本使用
  13. rabbitmq组件断链重连机制
  14. 安装 pycuda 出现 PEP517 的错误
  15. 2018总结----对共享单车的思考
  16. layout=“null”说什么意思
  17. 学习微信小程序开发文档总结
  18. centos7.3安装ldap
  19. 软件架构模式-事件驱动
  20. Microsoft Excel 教程:如何在 Excel 中使用 XLOOKUP 函数?

热门文章

  1. 浙大1018 Be carefull
  2. 龙芯looongnix系统开机自动执行脚本
  3. Ubuntu 20.04 搭建 PXE/iPXE Server
  4. 统计英文字母、数字个数
  5. html代码字号div style=,div字体大小设置 css设置div中字体大小尺寸样式
  6. 人机交互学习-4 交互设计过程
  7. HTML元素设置顶层,html,body最顶层元素.
  8. message:Error: 系统错误,错误码:80051,source size 3962KB exceed max limit 2MB [20220819 14:42:38][wx21e41af1
  9. Python开发环境安装教程
  10. 基于PHP+MySQL的学生成绩管理系统——计算机毕业设计