矩阵乘法2(codevs3147)
题目描写叙述 Description
给出两个n*n的矩阵。m次询问它们的积中给定子矩阵的数值和。
输入描写叙述 Input Description
第一行两个正整数n,m。
接下来n行,每行n个非负整数。表示第一个矩阵。
接下来n行,每行n个非负整数。表示第二个矩阵。
接下来m行。每行四个正整数a。b,c,d,表示询问第一个矩阵与第二个矩阵的积中。
以第a行第b列与第c行第d列为顶点的子矩阵中的元素和。
输出描写叙述 Output Description
对每次询问,输出一行一个整数。表示该次询问的答案。
例子输入 Sample Input
3 2
1 9 8
3 2 0
1 8 3
9 8 4
0 5 15
1 9 6
1 1 3 3
2 3 1 2
例子输出 Sample Output
661
388
数据范围及提示 Data Size & Hint
【数据规模和约定】
对30%的数据满足,n <= 100。
对100%的数据满足。n <= 2000,m <= 50000,输入数据中矩阵元素 < 100,a。b。
c,d <= n。
题解:
这个题尽管名字是矩阵乘法。可是和矩阵高速幂一点关系也没有。。
30%做法:
直接两个矩阵暴力相乘,然后再暴力询问。(ps:集训队的题居然给这么多暴力分)
100%做法:
如果你对矩阵乘法足够了解的话。能够发现我们事实上能够在O(n)的复杂度内处理出每次询问。
设要求和的矩阵为A(x1,x2,y1,y2);第一个矩阵为a,第二个矩阵为b那么矩阵A能够分行来计算
如果A矩阵第一行(x1)的元素为p[i];
那么依据矩阵乘法的法则
p[i]等于a矩阵的第X1行的元素和b矩阵的第i列的元素相应相乘。再相加。
sigma{p[i]}(y1<=i<=y2)为a矩阵的第X1行的元素分别和b矩阵的第y1到y2列的元素相应相乘,再相加。
那么我们能够发现这个式子能够使用乘法结合律提出a矩阵第x1行的元素。再用第i个元素与b矩阵第i列的和相乘,最后把所得的乘积相加,
同理第二行第三行也都一样,
我们会发现不同行之间也能够提取出b矩阵中每一列的和,
那么最后所询问矩阵的和就为a矩阵第x1-x2行每行的元素和与b矩阵第y1-y2列的每列的元素和相应相乘再相加。
所以仅仅要预处理出a矩阵每一行的前缀和
b矩阵每一列的前缀和就可以
时间复杂度O(n^2+n*m);
注意使用scanf或读入优化。
代码:
#include<iostream>
#include<cstdio>
using namespace std;
#define For(i,n) for(int i=1;i<=n;i++)
#define read(x) scanf("%d",&x);
int n,m,x,y,xx,yy,aa[2001][2001]={0},bb[2001][2001]={0},a,b;
int main()
{
read(n);read(m);
For(i,n) For(j,n)
{
read(a);
aa[i][j]=aa[i-1][j]+a;
}
For(i,n) For(j,n)
{
read(b);
bb[i][j]=bb[i][j-1]+b;
}
For(i,m)
{
read(x);read(y);read(xx);read(yy);
long long ans=0;
if (x>xx) swap(x,xx);
if (y>yy) swap(y,yy);
For(j,n)
ans+=(long long)(aa[xx][j]-aa[x-1][j])*(long long)(bb[j][yy]-bb[j][y-1]);
printf("%lld\n",ans);
}
}
矩阵乘法2(codevs3147)的更多相关文章
- *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 ...
- 【BZOJ-1898】Swamp 沼泽鳄鱼 矩阵乘法
1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1012 Solved: 566[Submit][S ...
- 【Codeforces718C】Sasha and Array 线段树 + 矩阵乘法
C. Sasha and Array time limit per test:5 seconds memory limit per test:256 megabytes input:standard ...
- 矩阵乘法的MapReduce实现
对于任意矩阵M和N,若矩阵M的列数等于矩阵N的行数,则记M和N的乘积为P=M*N,其中mik 记做矩阵M的第i行和第k列,nkj记做矩阵N的第k行和第j列,则矩阵P中,第i行第j列的元素可表示为公式( ...
随机推荐
- 安卓4.3以上版本已经完美支持BLE(英文版)
Android 4.3 (API Level 18) introduces built-in platform support for Bluetooth Low Energy in the cent ...
- POJ 2248 搜索
剪枝: 1.从后向前枚举 2.迭代加深 然后就0msAC了 //By SiriusRen #include <cstdio> using namespace std; int n,T,s[ ...
- IBM小机的开机步骤
IBM小机的开机步骤 以下以 IBM P570 小机包含静态逻辑分区(LPAR) 的 Oracle9i RAC环境为例进行讨论 1. 设备(小机.存储.光交......)加电 2. 启动存储 3. 启 ...
- TrueOS 不再想要成为“桌面 BSD”了
作者: John Paul Wohlscheid 译者: LCTT geekpi | 2018-07-13 22:53 TrueOS 很快会有一些非常重大的变化.今天,我们将了解桌面 BSD 领域将会 ...
- windows server 2012安装.NET3.5安装提示需要指定源路径 安装.net3.5提示安装不成功,提示需要指定源路径。
安装.net3.5提示安装不成功,提示需要指定源路径. 正确的操作步骤: 1.需要下载windows server 2012操作系统盘.用解压工具解压出来. 2012操作系统下载地址: ...
- iOS开发——设置屏幕亮度
想在APP里面调节屏幕的亮度,这只是个小众需求.而且,虽然可以直接调节手机的亮度,但是它还是个需求,客户有需求,剩下的就是我们的事了,好了,吐槽到此结束. 刚拿到这个需求的人,或许想的是直接对view ...
- bzoj2763 [JLOI]飞行路线 分层图最短路
问题描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的 ...
- [HAOI2007][SDOI2005]反素数
题目:洛谷P1463.BZOJ1053.Vijos P1172.codevs2912. 题目大意:对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g ...
- java uploadify 上传组件使用方法
!!!声明 1-3 是jsp页面所写内容 文中需要的util 参见百度云 http://pan.baidu.com/s/1kV0gqBt 如已失效 请加QQ1940978083 1.首先引入 ...
- LVS+keepalived均衡nginx配置
如果单台LVS发生突发情况,例如宕机.发生不可恢复现象,会导致用户无法访问后端所有的应用程序.避免这种问题可以使用HA故障切换,也就是有一台备用的LVS,主LVS 宕机,LVS VIP自动切换到从,可 ...