宁夏企业网站建设,网络推广软件平台,深圳网站建设服务哪个便宜点,有利于seo优化的是#x1f339;作者:云小逸 #x1f4dd;个人主页:云小逸的主页 #x1f4dd;Github:云小逸的Github #x1f91f;motto:要敢于一个人默默的面对自己#xff0c;强大自己才是核心。不要等到什么都没有了#xff0c;才下定决心去做。种一颗树#xff0c;最好的时间是十年前… 作者:云小逸 个人主页:云小逸的主页 Github:云小逸的Github motto:要敢于一个人默默的面对自己强大自己才是核心。不要等到什么都没有了才下定决心去做。种一颗树最好的时间是十年前其次就是现在学会自己和解与过去和解努力爱自己。希望春天来之前我们一起面朝大海春暖花开 专栏C 专栏Java语言 专栏C语言初阶专栏数据结构 文章目录前言二维前缀和算法介绍基本思想题目1【子矩阵的和】题目输入格式输出格式数据范围输入样例输出样例做题思路代码题目2K倍区间题目输入格式输出格式数据范围输入样例输出样例做题思路代码最后前言
今天这篇文章接着上一篇【一维前缀和】继续写【二维前缀和】如果有错误请私信我谢谢望见谅。 ——————————————————————————————
首先先写上几句话献给坚持创作的我和点开这篇文章希望进步的你 1.当身边的一道道风景变成了回忆 才忽然发现风景依然在人已是非少年起初我们揣着糊涂装明白后来我们揣着明白装糊涂。
2.人生百味情最浓人生繁华淡最真人生一路一步有一步的风景一程有一程的感悟不论时光如何流转有些东西不会改变那就是对美好的追求对真情的渴望给他人一份善良给自己一份淡然。
3.如果难过就抬头望望天空吧望着望着就忘了它那么大一定可以包容你的所有委屈。
4.人生几十年酸甜苦辣咸各种滋味都有打开内心的窗去呼吸一下外面的新鲜空气。别让自己活得太累。应当学着想开、看淡、学着不强求学着深藏。适时放松自己找寻宣泄给疲倦的内心解解压。
5.关关难过关关过夜夜难熬夜夜熬悲喜自渡他人难悟。悄悄崩溃默默自愈。
二维前缀和
算法介绍
二维前缀和算法是一种用于计算矩阵中任意矩形区域和的算法。
基本思想
先将矩阵中的每个元素都加上它左上角的元素然后再将每个元素加上它上面的元素最后得到一个新的矩阵这个矩阵中的每个元素都是原矩阵中以它为右下角的矩形区域的和。这样只要知道矩形区域的左上角和右下角的坐标就可以很容易地求出矩形区域的和。
题目1【子矩阵的和】
题目
输入一个 n 行 m 列的整数矩阵再输入 q 个询问每个询问包含四个整数 x1,y1,x2,y2表示一个子矩阵的左上角坐标和右下角坐标。对于每个询问输出子矩阵中所有数的和。
输入格式
第一行包含三个整数 nmq。接下来 n 行每行包含 m 个整数表示整数矩阵。接下来 q 行每行包含四个整数 x1,y1,x2,y2表示一组询问。
输出格式
共 q 行每行输出一个询问的结果。
数据范围
1≤n,m≤1000, 1≤q≤200000, 1≤x1≤x2≤n, 1≤y1≤y2≤m, −1000≤矩阵内元素的值≤1000
输入样例 3 4 3 1 7 2 4 3 6 2 8 2 1 2 3 1 1 2 2 2 1 3 4 1 3 3 4 输出样例 17 27 21 做题思路
首先将矩阵中的每个元素都加上它左上角的元素然后再将每个元素加上它上面的元素最后得到一个新的矩阵这个矩阵中的每个元素都是原矩阵中以它为右下角的矩形区域的和。然后循环读取查询的矩形区域的左上角和右下角的坐标并输出矩形区域的和。
代码
#includeiostream
using namespace std;const int N1010;
int n,m,q;
int a[N][N],s[N][N];int main()
{scanf(%d%d%d,n,m,q);for(int i1;in;i){for(int j1;jm;j){scanf(%d,a[i][j]);s[i][j]s[i-1][j]s[i][j-1]-s[i-1][j-1]a[i][j];}}while(q--){int x1,x2,y1,y2;scanf(%d%d%d%d,x1,y1,x2,y2);printf(%d\n,s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]s[x1-1][y1-1]);}return 0;
}题目2K倍区间
题目
给定一个长度为 N 的数列A1,A2,…AN如果其中一段连续的子序列 Ai,Ai1,…Aj 之和是 K 的倍数我们就称这个区间 [i,j] 是 K 倍区间。你能求出数列中总共有多少个 K 倍区间吗
输入格式
第一行包含两个整数 N 和 K。以下 N 行每行包含一个整数 Ai。
输出格式
输出一个整数代表 K 倍区间的数目。
数据范围
1≤N,K≤100000, 1≤Ai≤100000
输入样例 5 2 1 2 3 4 5 输出样例 6 做题思路
首先将数组中的每个元素都加上它前面的元素得到一个新的数组然后用一个数组cnt记录每个余数出现的次数最后遍历数组累加每个余数出现的次数即可得到答案。
代码
#includeiostream
#includecstring
#includecstdio
#includealgorithm
using namespace std;const int N100010;
int n,k;
long long s[N],cnt[N];int main()
{scanf(%d%d,n,k);for(int i1;in;i){scanf(%lld,s[i]);s[i]s[i-1];}long long res0;cnt[0]1;for(int i1;in;i){rescnt[s[i]%k];cnt[s[i]%k];}printf(%lld\n,res);return 0;
}
最后
十分感谢你可以耐着性子把它读完和我可以坚持写到这里送几句话对你也对我
1.太多的事慢慢地就不能做了太多的人渐渐地就不见了。成长似乎是一个丢失的过程。青春就是注定了要颠簸要有眼泪和汗水有委屈、不甘和失败。后来慢慢知道一切该发生的就是会发生一切会错过的就是会错过。
2.趁自己还不老走自己想走的路。没有理由不去闯时间抓起了就是黄金虚度了就是流水理想努力了才叫理想放弃了那只是妄想努力虽然不一定会获得但不努力就一定一无所获。
3.趁自己还不老走自己想走的路。没有理由不去闯时间抓起了就是黄金虚度了就是流水理想努力了才叫理想放弃了那只是妄想努力虽然不一定会获得但不努力就一定一无所获。
4.我一直以为人是慢慢变老的其实不是人是一瞬间变老的。
5.随着年龄的增长我们愈加发现或许我们并不是失去了一些人而是更加懂得到底谁才是最重要的人。
最后如果觉得我写的还不错请不要忘记点赞✌收藏✌加关注✌哦(ω)
愿我们一起加油奔向更美好的未来愿我们从懵懵懂懂的一枚菜鸟逐渐成为大佬。加油为自己点赞