激光炸弹和Gundam Unicorn是二维前缀和和二位差分的综合应用。

首先是一二维差分,前缀和的模板前缀和与差分 图文并茂 超级详细整理(全网最通俗易懂)_林深不见鹿 的博客-CSDN博客_前缀和与差分

1.一维前缀和,求某个区间内几个数的和

#include<iostream>
#include<algorithm>
using namespace std;
int a[101];
int n;
int s[101];
int main()
{cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];s[i] = s[i - 1] + a[i];}for (int i = 1; i <= n; i++){cout << s[i] << " ";}return 0;
}

2.一维差分,让某个区间都加上一个常数

#include<iostream>
#include<algorithm>
using namespace std;
int n, m, l, r, c;
int a[100001];
int b[100001];
int main()
{cin >> n >> m;for (int i = 1; i <= n; i++){cin >> a[i];b[i] = a[i] - a[i - 1];}  while (m--){cin >> l >> r >> c;b[l] += c;b[r + 1] -= c;}for (int i = 1; i <= n; i++){a[i] = a[i - 1] + b[i];cout << a[i] << " ";}return 0;
}

3.二维前缀和,求矩阵的某个子矩阵中元素的和

#include<iostream>
using namespace std;
const int N = 1010;
long long  a[N][N];int main()
{int n, m, q;//cin>>n>>m>>q;scanf("%d%d%d", &n, &m, &q);for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++){//cin>>a[i][j];scanf("%lld", &a[i][j]);a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];}while (q--){int x1, x2, y1, y2;scanf("%d%d%d%d", &x1, &y1, &x2, &y2);printf("%lld", a[x2][y2] - a[x2][y1 - 1] - a[x1 - 1][y2] + a[x1 - 1][y1 - 1]);if (q != 0) printf("\n");}return 0;
}

具体是为什么这样写,可以搜一下原理图

4.二维差分,让矩阵的某个子矩阵中元素都加上一个常数

#include<iostream>
using namespace std;
const int N=1010;
long long a[N][N];
long long s[N][N];int main()
{int n,m,q;scanf("%d%d%d",&n,&m,&q);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++) scanf("%lld",&a[i][j]);while(q--){int x1,x2,y1,y2,c;scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&c);s[x1][y1]+=c;s[x1][y2+1]-=c;s[x2+1][y1]-=c;s[x2+1][y2+1]+=c;//理解见下图 }for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];printf("%lld ",a[i][j]+s[i][j]);}if(i!=n) printf("\n");}return 0;
} 

1.激光炸弹:

99. 激光炸弹 - AcWing题库

#include <algorithm>
#include <iostream>
using namespace std;const int N = 5e3 + 10; //不能开 1e5+10, 内存限制比较严格
int s[N][N];
int n, r;int main() {cin >> n >> r;for (int i = 0; i < n; i++) {int x, y, w;cin >> x >> y >> w;
//        s[++x][++y]=w;  //错误s[++x][++y] += w; //右移一位, 就不需要考虑边界了, 并且必须是+=, 不能是=, 因为1个位置可能有多个目标}for (int i = 1; i <= 5001; i++) {for (int j = 1; j <= 5001; j++) {
//            s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + s[i][j];s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];}}int ans = 0;for (int x1 = 1; x1 <= 5001; x1++) {for (int y1 = 1;y1 <= 5001; y1++) {int x2 = min(x1 + r - 1, 5001);int y2 = min(y1 + r - 1, 5001);//处理的最好的就是这个地方了,正好能够保证矩形的子矩阵ans = max(ans, s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1-1][y1 - 1]);}}cout << ans << endl;return 0;
}

2.Gundam Unicorn

WeJudge - 基于实时评测的实践教学辅助平台 (bnuz.edu.cn)

#include<iostream>
using namespace std;
int main()
{int n, m;int w, h;while (scanf_s("%d%d", &n, &m) != EOF) {//题目要求输入EOF才结束int ai[35][35];int bi[35][35];int ans = 0;for (int i = 1; i <= m; ++i) {for (int j = 1; j <= n; ++j) {cin >> ai[i][j];}}for (int i = 1; i <= m; ++i) {for (int j = 1; j <= n; ++j) {bi[i][j] = ai[i][j] + bi[i - 1][j] + bi[i][j - 1] - bi[i - 1][j - 1];}}cin >> w >> h;for (int x1 = 1; x1 <= m; x1++) {for (int y1 = 1; y1 <= n; y1++) {int x2 = min(x1 + h - 1, m);int y2 = min(y1 + w - 1, n);//和上一道题目一样,巧妙的避免了越界的问题ans = max(ans, bi[x2][y2] - bi[x2][y1 - 1] - bi[x1 - 1][y2] + bi[x1 - 1][y1 - 1]);}}cout << ans << endl;}return 0;
}

激光导弹Gundam Unicorn(二维前缀和and二维差分)相关推荐

  1. Nowcoder farm ( 树状数组、二维前缀和、二维偏序 )

    题目链接 分析 : 最简单的想法当然就是去模拟 直接对每个施肥料的操作进行模拟.然后计算贡献 但是这显然会超时.这题需要换一个思维 对于一个土地(也就是二维平面上的一个点)的种类是 T' 如果它被操作 ...

  2. AcWing 99. 激光炸弹 (二维前缀和)

    99. 激光炸弹 题意 给定一个5000x5000的地图 随机在该地图上放置物品,物品具有价值,且不同物品可以放置在同一位置 有一个炸弹的爆炸范围为RxR的正方形 问该炸弹在地图上爆炸一次,最多能摧毁 ...

  3. 暑假每日算法学习打卡(十)----[HNOI2003]激光炸弹,「土」秘法地震(二维前缀和),Captcha Cracker【牛客】

    [HNOI2003]激光炸弹 题目描述  一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标. 现在地图上有n(N ≤ 10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目 ...

  4. P2280 [HNOI2003]激光炸弹(二维前缀和的简单应用)难度⭐⭐⭐

    P2280 [HNOI2003]激光炸弹 输出 2 1 0 0 1 1 1 1 输入 1 这道题就是最基础的二位前缀和的应用,如果不会的话可以点击下方链接学习哟 前缀和差分详解 #include< ...

  5. 《算法竞赛进阶指南》打卡-基本算法-AcWing 99. 激光炸弹:二维前缀和

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 前缀和习惯从下标1开始. 注意:本题是不包含边界的.什么意思? 以样例为例,这里有两个点,分别在(0,0) 和(1,1),且攻击的矩 ...

  6. [HNOI2003]激光炸弹(二维前缀和+大坑点)

    地图上有 N 个目标,用整数 Xi,Yi表示目标在地图上的位置,每个目标都有一个价值 Wi. 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包含 R×R个位置的正方形内的所有目 ...

  7. [日常摸鱼]bzoj1218[HNOI2003]激光炸弹-二维前缀

    题意:二维网格一些格子有权值,求用边长为$r$的正方形能覆盖到格子权值和的最大值,格子大小$ \leq 5000$ 非常裸的二维前缀,然而 题目下标从0开始! QAQ 要是比赛就要爆零啦- #incl ...

  8. BZOJ 1218(二维前缀和)

    传送门: 题面: 1218: [HNOI2003]激光炸弹 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4197  Solved: 1788 [S ...

  9. Monitor CodeForces - 846D ——二维前缀和

    Recently Luba bought a monitor. Mon itor is a rectangular matrix of size n × m. But then she started ...

最新文章

  1. swift:使用协议protocol设置颜色,UIImage的切圆角ImageWithCornerRadius
  2. switch最大选项数目_随时随地学习C语言之3—if和switch哪个效率高?
  3. qq群 html,我的群组-普通群组.html
  4. spring data jpa 的 in 查询 Specification 实现
  5. 程序员黑话,看懂的都是老司机!
  6. Rman--状态管理命令
  7. 浅谈FFT(快速博立叶变换)学习笔记
  8. 【CSS3】CSS多列属性(Multi-column)
  9. mysql备份之lvm
  10. Eclipse用法和技巧
  11. 微信小程序毕业设计和毕业论文怎么写,答辩流程是怎样的?
  12. [面经]星环科技大数据后台开发实习面试
  13. 一位全减器逻辑电路图_一位全减器电路实现方法探讨
  14. python正则匹配中文
  15. 关于U盘格式化以后容量突然减少很多的解决办法
  16. [iOS] HealthKit 睡眠分析
  17. 联想拯救者y7000p加内存条_联想Y7000p加装金百达内存条,内存条细节多图
  18. 2022年Cs231n PPT笔记-训练CNN
  19. 自上而下面向能力的编程思想
  20. 矩阵分析L1 线性空间基础

热门文章

  1. 如何去除软件内嵌广告_iphone如何一键去除app内置小广告?
  2. 移动端video点开后层级过高问题
  3. 爬在NLP的大道上——Question Answering Infused Pre-training of General-Purpose Contextualized Representations
  4. 北风设计模式课程---里氏代换原则
  5. 复旦大学的计算机专业分数线,2018复旦大学分数线 各专业分数线是多少
  6. windows提权速查流程
  7. 英语3500词(18/20)health主题(2022.4.28)
  8. (matlab代码分享,可运行) 多技能员工排班调度多目标优化(技能熟练度包含学习型、遗忘型)(Part 1)
  9. Aggressive cows-疯牛POJ(2456)-详解
  10. 计算机网络TCP的全称,tcp/ip全称是什么