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

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

相关文章

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类