题目链接

题意 : 给你两个n*n的矩阵,然后两个相乘得出结果是多少。

思路 :一开始因为知道会超时所以没敢用最普通的方法做,所以一直在想要怎么处理,没想到鹏哥告诉我们后台数据是随机跑的,所以极端数据是不可能会有的,而我们一开始一直在想极端数据能接受的方法。。。。。。后来看了鹏哥的做法,就是把是0的地方都跳过就可以了,用矩阵保存前一个非0数的位置是多少。二师兄给我看了一个代码,人家根本没用别的优化,直接将最里层k的循环提到了最外层,然后就AC了,对此我表示无语。

 #include <cstdio>
#include <cstring>
#include <iostream> using namespace std ; int a[][],b[][];
int a1[][],b1[][] ;
int c[][] ; int main()
{
int n ;
while(~scanf("%d",&n))
{
memset(a,,sizeof(a)) ;
memset(b1,,sizeof(b1)) ;
memset(c,,sizeof(c)) ;
memset(a1,,sizeof(a1)) ;
memset(b,,sizeof(b)) ;
for(int i = ; i <= n ; i++)
{
for(int j = ; j <= n ; j++)
{
scanf("%d",&a[i][j]) ;
a[i][j] %= ;
}
}
for(int i = ; i <= n ; i++)
{
for(int j = ; j <= n ; j++)
{
scanf("%d",&b[i][j]) ;
b[i][j] %= ;
}
}
for(int i = ; i <= n ; i++)
{
int pre = - ;
for(int j = n ; j >= ; j--)
{
a1[i][j] = pre ;
if(a[i][j])
pre = j ;
}
}
for(int i = ; i <= n ; i++)
{
int pre = - ;
for(int j = n ; j >= ; j--)
{
b1[i][j] = pre ;
if(b[i][j])
pre = j ;
}
}
for(int i = ; i <= n ; i++)
{
for(int j = a1[i][] ; j + ; j = a1[i][j])
{
for(int k = b1[j][] ; k + ; k = b1[j][k])
{
c[i][k] += a[i][j]*b[j][k] ;
}
}
}
for(int i = ; i <= n ; i++)
{
for(int j = ; j <= n ; j++)
{
printf("%d",c[i][j]%) ;
if(j != n)
printf(" ") ;
}
printf("\n") ;
}
}
return ;
}

看一下这个把k放在最外层的代码吧。。。。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = ;
int a[N][N], b[N][N], ans[N][N];
int main()
{
int n, i, j, k;
while(~scanf("%d",&n))
{
for(i = ; i <= n; i++)
for(j = ; j <= n; j++)
{
scanf("%d",&a[i][j]);
a[i][j] %= ;
}
for(i = ; i <= n; i++)
for(j = ; j <= n; j++)
{
scanf("%d",&b[i][j]);
b[i][j] %= ;
}
memset(ans, , sizeof(ans));
for(k = ; k <= n; k++) //经典算法中这层循环在最内层,放最内层会超时,但是放在最外层或者中间都不会超时,不知道为什么
for(i = ; i <= n; i++)
for(j = ; j <= n; j++)
{
ans[i][j] += a[i][k] * b[k][j];
//ans[i][j] %= 3; //如果在这里对3取余,就超时了
}
for(i = ; i <= n; i++)
{
for(j = ; j < n; j++)
printf("%d ", ans[i][j] % );
printf("%d\n", ans[i][n] % );
}
}
return ;
}

2014多校第五场1010 || HDU 4920 Matrix multiplication(矩阵乘法优化)的更多相关文章

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

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

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

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

  3. 2014多校第六场 1010 || HDU 4930 Fighting the Landlords (模拟)

    题目链接 题意 : 玩斗地主,出一把,只要你这一把对方要不了或者你出这一把之后手里没牌了就算你赢. 思路 : 一开始看了第一段以为要出很多次,实际上只问了第一次你能不能赢或者能不能把牌出尽. #inc ...

  4. 2014多校第五场1001 || HDU 4911 Inversion (归并求逆序数)

    题目链接 题意 : 给你一个数列,可以随意交换两相邻元素,交换次数不超过k次,让你找出i < j 且ai > aj的(i,j)的对数最小是多少对. 思路 : 一开始想的很多,各种都想了,后 ...

  5. HDU 4920 Matrix multiplication (硬件优化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4920 解题报告:求两个800*800的矩阵的乘法. 参考这篇论文:http://wenku.baidu ...

  6. hdu - 4920 - Matrix multiplication(缓存优化+开挂)

    题意:求两个n x n的矩阵相乘后模3的结果,n <= 800. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4920 -->>呀呀 ...

  7. HDU 4920 Matrix multiplication(bitset优化)

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

  8. HDU 4920 Matrix multiplication(bitset)

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

  9. HDU 4920.Matrix multiplication-矩阵乘法

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

随机推荐

  1. 苹果HomeKit如何牵动全国智能硬件格局

    苹果HomeKit如何牵动全国智能硬件格局 2014-06-23 15:48 发表      系统分类:消费电子      自定义分类:默认 标签:智能家居 苹果在6月的WWDC开发者大会上发布了包括 ...

  2. iOS学习之基础控件

    一.UILabel      1.UILabel(标签):是显示文本的空间.在App中UILabel是出现频率最高的控件.      2.UILabel是UIView的子类,作为子类一般是为了扩充父类 ...

  3. How to Notify Command to evaluate in mvvmlight

    How to Raize Command to evalituate in mvvm In mvvmlight, we bind our control to the relaycommand obj ...

  4. 使用Groovy构建自己的脚本环境

    场景 在进行Web服务端开发的时候,发布前通常需要测试一遍.对于一个大一点的项目,最好的办法是写个自动化测试程序. 以Groovy为例,写测试代码之前通常的有如下几个操作 引用相关的类库 import ...

  5. C#开源大全--汇总(转)

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  6. 设置 Eclipse 智能代码提示,大幅度减少 alt+/ 使用频率,打每个字都出现代码提示的办法

    以前网上有个英文版本的,现在自己汉化一下...O(∩_∩)O 哈哈 ~   http://www.cnblogs.com/lidabo/archive/2013/03/05/2944245.html ...

  7. html5 drag api详解

    可以夸张点说,如果你不会拖拽,你不是一个合格的前端开发. 回想下,以前我们是怎么实现拖拽的,主要有以下几步: 1.目标元素绑定mousedown事件,记录下此时鼠标位置和拖拽元素的位置差,分别是 di ...

  8. SQL Server性能优化(4)命名和书写规范

    命名规范是一个老生常谈的问题,好的命名规范对于团队程序开发,对bug定位.处理,项目延续有很重要的作用. 一. 列举现在的问题:     1.名称首字母不大写     2. 用中文名字         ...

  9. Dijkstra算法亲自实践

    按路径长度递增次序产生算法: 把顶点集合V分成两组: (1)S:已求出的顶点的集合(初始时只含有源点V0) (2)V-S=T:尚未确定的顶点集合 将T中顶点按递增的次序加入到S中,保证: (1)从源点 ...

  10. 关于Office 2013的几个问题

    最近在阅读一些pdf的材料,想对其中做一些批注,但是PDF文档做批准比较麻烦,而且市场上的几个pdfToWord也不是很好用. 偶然的机会发现,使用office2013可以直接打开pdf文件,所以赶紧 ...