BZOJ 2901: 矩阵求和
2901: 矩阵求和
Time Limit: 20 Sec Memory Limit: 256 MB
Submit: 411 Solved: 216
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
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
388
【数据规模和约定】
对30%的数据满足,n <= 100。
对100%的数据满足,n <= 2000,m <= 50000,输入数据中矩阵元素 < 100,a,b,c,d <= n。
HINT
Source
[Submit][Status][Discuss]
经典题目,然后我忘了怎么做了,然后就被高一学长教做人了……
不妨设答案为乘积矩阵的第a行到第c行,第b行到第d行的元素之和。
$$\sum_{i=a}^{c} \sum_{j=b}^{d} \sum_{k=1}^{n} A_{i,k}B_{k,j}$$
$$\sum_{k=1}^{n} \sum_{i=a}^{c} \sum_{j=b}^{d} A_{i,k}B_{k,j}$$
$$\sum_{k=1}^{n} (\sum_{i=a}^{c}{A_{i,k}}) (\sum_{j=b}^{d}{B_{k,j}})$$
然后对两个矩阵进行前缀和预处理,每次查询的时候暴力枚举k就可以。卡常技巧也是很重要的……
1 #include <cstdio> 2 3 #define siz (1 << 20) 4 #define frd fread(hd = buf, 1, siz, stdin) 5 #define gtc (hd == tl ? (frd, *hd++) : *hd++) 6 7 char buf[siz]; 8 char *hd = buf + siz; 9 char *tl = buf + siz; 10 11 inline int nextInt(void) 12 { 13 int r = 0, c = gtc; 14 15 for (; c < 48; c = gtc); 16 17 for (; c > 47; c = gtc) 18 r = r * 10 + c - '0'; 19 20 return r; 21 } 22 23 #undef siz 24 #undef frd 25 #undef gtc 26 27 #define mxn 2005 28 #define mxm 50005 29 #define lnt long long 30 #define rnt register int 31 32 int n, m; 33 lnt A[mxn][mxn]; 34 lnt B[mxn][mxn]; 35 36 signed main(void) 37 { 38 #ifndef ONLINE_JUDGE 39 freopen("in", "r", stdin); 40 #endif 41 42 n = nextInt(); 43 m = nextInt(); 44 45 for (rnt i = 1; i <= n; ++i) 46 for (rnt j = 1; j <= n; ++j) 47 A[i][j] = nextInt() + A[i - 1][j]; 48 49 for (rnt i = 1; i <= n; ++i) 50 for (rnt j = 1; j <= n; ++j) 51 B[i][j] = nextInt() + B[i][j - 1]; 52 53 while (m--) 54 { 55 static int a, b, c, d; 56 57 a = nextInt(); 58 c = nextInt(); 59 b = nextInt(); 60 d = nextInt(); 61 62 #define swap(x, y) (x ^= y ^= x ^= y) 63 64 if (a > b)swap(a, b); 65 if (c > d)swap(c, d); 66 67 lnt ans = 0; 68 69 for (rnt k = 1; k <= n; ++k) 70 ans += (A[b][k] - A[a - 1][k]) * (B[k][d] - B[k][c - 1]); 71 72 printf("%lld\n", ans); 73 } 74 }
@Author: YouSiki
转载于:https://www.cnblogs.com/yousiki/p/6536949.html
BZOJ 2901: 矩阵求和相关推荐
- 输入挂(bzoj 2901: 矩阵求和)
很少用输入挂,以为不超时就好了,但是这题貌似不用过不去啊 只好拿出来用了,当个模板 原理是用getchar()读入会比用scanf快一些 int Read() {int x = 0, f = 1;ch ...
- BZOJ2901: 矩阵求和
题解: 对于表达式用前缀和优化 n^2预处理 n*m查询 #include <algorithm> #include <iostream> #include <cstr ...
- BZOJ 1176[Balkan2007]Mokia (cdq分治,矩阵加矩阵求和)
BZOJ 1176[Balkan2007]Mokia (cdq分治,矩阵加矩阵求和) Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值. ...
- 2018第九届蓝桥杯C/C++ B国赛 —— 第六题:矩阵求和
矩阵求和 经过重重笔试面试的考验,小明成功进入 Macrohard 公司工作. 今天小明的任务是填满这么一张表: 表有 n 行 n 列,行和列的编号都从1算起. 其中第 i 行第 j 个元素的值是 g ...
- C语言用数组编程矩阵,二维数组—矩阵求和(C语言)
昨天上机了,之前上机都觉得题目挺简单的,但昨天的题明显比以前难了好吗!字符串二维数组感觉也没教什么呀..所以我也做了蛮久,现依次把这几道题放在这里留作纪念. 题目1:请写一个程序,对于一个m行m列(2 ...
- 2018第九届蓝桥杯B组决赛题解第六题 矩阵求和
标题:矩阵求和 经过重重笔试面试的考验,小明成功进入 Macrohard 公司工作. 今天小明的任务是填满这么一张表: 表有 n 行 n 列,行和列的编号都从1算起. 其中第 i 行第 j 个元素的值 ...
- sum 矩阵求和 matlab
matlab中针对的数据大多是以矩阵形式来处理,求和函数是sum 下面通过几个例子来介绍求和函数的应用: matlab中: a=sum(A) %列求和 b=sum(A,2) %行求和 c=sum(A ...
- matlab div矩阵运算,【求助】多维矩阵求和运算!!
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 4-D矩阵:B(:,:,i,j) 具体形式如下! 想对每j列进行对应项求和相加, 整了一上午都-- 谢谢大家! B(:,:,1,1) = 1.0e+010 ...
- bzoj#4555. [Tjoi2016Heoi2016]求和
bzoj#4555. [Tjoi2016&Heoi2016]求和 题目描述 Solution 有一个关于第二类斯特林数的公式: {nm}=1m!∑i(mk)(m−k)n(−1)k\left\{ ...
最新文章
- nokia android 8,疑似诺基亚8再曝光:预装Android 8.0系统
- qt 制作记事本_23.QT记事本
- .bin 文件用excel文件打开_用python读Excel文件
- Python的基本语法汇总
- 物联卡的类型有几种,如何区分
- Activity使用Intent启动另一个Activity
- 广告公司测试软件题目,信息流广告测试题,看看你广告优化能力
- 火箭工作室c++小游戏——斗地主
- 纤亿通谈-单模和多模光纤跳线有哪些不同之处?
- 计算机考试成绩分析汇报,计算机考试成绩分析与总结.doc
- win10怎么查看自己笔记本电脑电池的损耗情况
- Windows下自动云备份思源笔记到Gitee
- 短视频矩阵/短视频SEO矩阵系统源码/系统搭建
- web前端培训—css源码笔记(二)【爱创课堂】
- 怎样卸载计算机更新程序,windows10升级程序卸载怎么操作_windows10升级程序怎样卸载删除-win7之家...
- Apple Lossless Audio Codec 苹果无损音频解码器
- C语言中chdir()使用
- 4G物联网卡的几点优势
- router学习(二): 路由导航守卫
- 2019文章分类汇总