【蓝桥备赛】肖恩的投球游戏加强版——基础二维差分

2024-01-28 17:52

本文主要是介绍【蓝桥备赛】肖恩的投球游戏加强版——基础二维差分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接

肖恩的投球游戏加强版

个人思路

q 次对一个 n * m 的矩阵操作,我们肯定不能对这个矩阵每次都进行修改,不然复杂度就是 O (q n m) 也就是 1e11, 明显会超时的。

那么,我们就需要拿一个数组记录下这 q 次操作都干了什么?

	while(q--){int x1, y1, x2, y2;ll c;cin >> x1 >> y1 >> x2 >> y2 >> c;brr[x1][y1] += c;brr[x1][y2 + 1] -= c;brr[x2 + 1][y1] -= c;brr[x2 + 1][y2 + 1] += c;}for(int i = 1; i <= n; ++i)for(int j = 1; j<= m; ++j)brr[i][j] += brr[i - 1][j] + brr[i][j - 1] - brr[i - 1][j - 1];

这里brr数组初始是一个空的数组。在这里我们将这 q 次进行标记,并通过求前缀和获得对于每一个单元格的操作结果,到底是 +10 了还是 -4 了,都清晰的显示在 brr 数组上。
之后,我们就可以将 arr数组 + brr数组 得到修改后的 arr 数组。

	for(int i = 1; i <= n; ++i)for(int j = 1; j<= m; ++j)arr[i][j] += brr[i][j];

参考代码

C/C++

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3 + 10;
int n, m, q;
ll arr[N][N], brr[N][N];
int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n >> m >> q;for(int i = 1; i <= n; ++i)for(int j = 1; j<= m; ++j)cin >> arr[i][j];while(q--){int x1, y1, x2, y2;ll c;cin >> x1 >> y1 >> x2 >> y2 >> c;brr[x1][y1] += c;brr[x1][y2 + 1] -= c;brr[x2 + 1][y1] -= c;brr[x2 + 1][y2 + 1] += c;}for(int i = 1; i <= n; ++i)for(int j = 1; j<= m; ++j)brr[i][j] += brr[i - 1][j] + brr[i][j - 1] - brr[i - 1][j - 1];for(int i = 1; i <= n; ++i)for(int j = 1; j<= m; ++j)arr[i][j] += brr[i][j];for(int i = 1; i <= n; ++i)for(int j = 1; j<= m; ++j)cout << arr[i][j] << " \n"[j == m];
}

Java

import java.io.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner();int n = sc.nextInt();int m = sc.nextInt();int q = sc.nextInt();long[][] arr = new long[n + 5][m + 5];long[][] brr = new long[n + 5][m + 5];for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j)arr[i][j] = sc.nextLong();while (q-- > 0) {int x1 = sc.nextInt();int y1 = sc.nextInt();int x2 = sc.nextInt();int y2 = sc.nextInt();long c = sc.nextLong();brr[x1][y1] += c;brr[x1][y2 + 1] -= c;brr[x2 + 1][y1] -= c;brr[x2 + 1][y2 + 1] += c;}for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j)brr[i][j] += brr[i - 1][j] + brr[i][j - 1] - brr[i - 1][j - 1];for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j)arr[i][j] += brr[i][j];for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j) {System.out.print(arr[i][j]);System.out.print(j == m ? "\n" : " ");}}
}class Scanner {static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));public long nextLong() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (long) st.nval;}public int nextInt() {try {st.nextToken();} catch (IOException e) {throw new RuntimeException(e);}return (int) st.nval;}
}

这篇关于【蓝桥备赛】肖恩的投球游戏加强版——基础二维差分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654354

相关文章

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

游戏闪退弹窗提示找不到storm.dll文件怎么办? Stormdll文件损坏修复技巧

《游戏闪退弹窗提示找不到storm.dll文件怎么办?Stormdll文件损坏修复技巧》DLL文件丢失或损坏会导致软件无法正常运行,例如我们在电脑上运行软件或游戏时会得到以下提示:storm.dll... 很多玩家在打开游戏时,突然弹出“找不到storm.dll文件”的提示框,随后游戏直接闪退,这通常是由于

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2