hdu4920 矩阵乘法%3
题意:
给你两个矩阵,让你求两矩阵的乘积,然后3取余。矩阵是n*n的,n<=800
思路:
如果什么都不考虑的话,矩阵的乘法是o(n^3)的,800*800*800 = 512000000,超时那是妥妥的,而且还用到取余,%这个东西在我的印象里是很费时间的,回到这道题目,我们发现一个很关键的地方,就是%3,那么也就是说只有0.1.2这三种状态,这样的话我们直接改变一下矩阵乘法的循环顺序,然后每次跳过0,就可以节省1/3的时间了,然后就ac了,但是后来发现个很奇怪的地方就是如果不优化0,只要改变一下循环顺序也可以ac,
TLE
for(i = 1 ;i <= n ;i ++)
for(j = 1 ;j <= n ;j ++)
for(k = 1 ;k <= n ;k ++)
c[i][j] = c[i][j] + a[i][k] * b[k][j]
AC
for(k = 1 ;k <= n ;k ++)
for(i = 1 ;i <= n ;i ++)
for(j = 1 ;j <= n ;j ++)
c[i][j] = c[i][j] + a[i][k] * b[k][j]
或者
for(k = 1 ;k <= n ;k ++)
for(i = 1 ;i <= n ;i ++)
if(a[i][k])
for(j = 1 ;j <= n ;j ++)
c[i][j] = c[i][j] + a[i][k] * b[k][j]
上面第一种超时,第三种是优化了0,也就是优化掉了1/3的时间可以ac可以接受,但是接受不了的就是第二种为什么会ac,我后来查了写for循环的东西,知道了一点,
(1)
for(i = 1 ;i <= 10000 ;i ++)
for(j = 1 ;j <= 100 ;j ++)
(2)
for(i = 1 ;i <= 100 ;i ++)
for(j = 1 ;j <= 10000 ;j ++)
在算法的角度去考虑,上面两个的时间复杂度是一样的,但是在汇编角度去考虑,(2)会比(1)快很多,至于为什么,我不是很懂汇编,所以不能用汇编来解释,但是我猜测有可能是这样,第一层循环跳到第二层循环的时候有一些操作a,(1)比(2)多做了很多操作a,其余的地方他俩用的时间一样,这样就可能造成(2)比(1)快《结论是对的,证明是自己瞎猜的》,估计这个题目也是因为类似于这样的东西导致的第二种情况能ac<上面的这些都是我自己猜的,有了解的希望能给我留个言,我也学习学习>
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<stdio.h>
#include<string.h>
typedef struct
{
int mat[810][810];
}A; A mat_mat(A a ,A b ,int n)
{
A c;
memset(c.mat ,0 ,sizeof(c.mat));
for(int k = 1 ;k <= n ;k ++)
for(int i = 1 ;i <= n ;i ++)
{
if(a.mat[i][k])
for(int j = 1 ;j <= n ;j ++)
c.mat[i][j] = c.mat[i][j] + a.mat[i][k] * b.mat[k][j];
}
return c;
}
A a ,b ,c;
int main ()
{
int n ,i ,j;
while(~scanf("%d" ,&n))
{
for(i = 1 ;i <= n ;i ++)
for(j = 1 ;j <= n ;j ++)
{
scanf("%d" ,&a.mat[i][j]);
a.mat[i][j] %= 3;
}
for(i = 1 ;i <= n ;i ++)
for(j = 1 ;j <= n ;j ++)
{
scanf("%d" ,&b.mat[i][j]);
b.mat[i][j] %= 3;
}
c = mat_mat(a ,b ,n);
for(i = 1 ;i <= n ;i ++)
for(j = 1 ;j <= n ;j ++)
if(j == n) printf("%d\n" ,c.mat[i][j] % 3);
else printf("%d " ,c.mat[i][j] % 3);
}
return 0;
}
hdu4920 矩阵乘法%3的更多相关文章
- HDU4920 矩阵乘法
嗯嗯 就算是水题吧. (缩完行就15行) 题意:两个n*n的矩阵相乘(n<=800),结果对3取模 思路:先对3取模,所以两个矩阵里面会出现很多0,所以可以先枚举一个矩阵,只有当该位置不是0的时 ...
- hdu4920 Matrix multiplication 模3矩阵乘法
hdu4920 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 ...
- 矩阵乘法分配律+bitset优化——hdu4920
因为是模3,所以把原矩阵拆成两个01矩阵,然后按分配律拆开分别进行矩阵乘法,行列用bitset来存进行优化即可 注意 int bitset<int>::count() 函数可以统计bits ...
- *HDU2254 矩阵乘法
奥运 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...
- *HDU 1757 矩阵乘法
A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- CH Round #30 摆花[矩阵乘法]
摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...
- POJ3070 Fibonacci[矩阵乘法]
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13677 Accepted: 9697 Descri ...
- bzoj 2738 矩阵乘法
其实这题跟矩阵乘法没有任何卵关系,直接整体二分,用二维树状数组维护(刚刚学会>_<),复杂度好像有点爆炸(好像有十几亿不知道是不是算错了),但我们不能怂啊23333. #include&l ...
- 【BZOJ-2476】战场的数目 矩阵乘法 + 递推
2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ...
随机推荐
- 鸿蒙的js开发模式19:鸿蒙手机下载python服务器端文件的实现
目录:1.承接上篇鸿蒙客户端上传文件2.域名通过内网穿透工具3.python服务器端代码4.鸿蒙手机的界面和业务逻辑5.<鸿蒙的js开发模式>系列文章合集 1.承接上篇鸿蒙客户端上传文件, ...
- Java 集合框架 03
集合框架·HashSet 和 TreeSet HashSet存储字符串并遍历 * A:Set集合概述及特点 * 通过API查看即可 * 无索引,不可以重复,无序 * B:案例演示 * HashSet存 ...
- 关闭ubuntu防火墙
1.关闭ubuntu的防火墙 ufw disable 开启防火墙 ufw enable 2.卸载了iptables apt-get remove iptables 3.关闭ubuntu中的防火墙的其余 ...
- JVM实战调优(空格引发的服务异常)
JVM实战调优 问题描述 某一个项目中有一个文字转语音的服务,使用的是科大讯飞的语音转换服务,需要调用三方服务.因其转换服务是一个耗时操作,官方给的demo使用的是 WebSocket 进行数据转换操 ...
- 「NOIP 2020」微信步数(计数)
「NOIP 2020」微信步数(Luogu P7116) 题意: 有一个 \(k\) 维场地,第 \(i\) 维宽为 \(w_i\),即第 \(i\) 维的合法坐标为 \(1, 2, \cdots, ...
- python 常用库收集
读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz写的最富盛名的http库.每个Python程序员都 ...
- 使用 Kubernetes 扩展专用游戏服务器
系列 探索使用 Kubernetes 扩展专用游戏服务器:第 1 部分-容器化和部署 探索使用 Kubernetes 扩展专用游戏服务器:第 2 部分-管理 CPU 和内存 探索使用 Kubernet ...
- python基础之流程控制(1)
一.分支结构:if 判断 1.什么要有if 判断语句? 让计算机可以像人一样根据条件进行判断,并根据判断结果执行相应的流程. 2.基本结构 单分支结构 # 单分支 if 条件1: 代码1 代码2 代码 ...
- 开源一个比雪花算法更好用的ID生成算法(雪花漂移)
比雪花算法更好用的ID生成算法(单机或分布式唯一ID) 转载及版权声明 本人从未在博客园之外的网站,发表过本算法长文,其它网站所现文章,均属他人拷贝之作. 所有拷贝之作,均须保留项目开源链接,否则禁止 ...
- 【RocketMQ源码分析】深入消息存储(3)
前文回顾 CommitLog篇 --[RocketMQ源码分析]深入消息存储(1) ConsumeQueue篇 --[RocketMQ源码分析]深入消息存储(2) 前面两篇已经说过了消息如何存储到Co ...