蓝桥杯省赛无忧 编程13 肖恩的投球游戏

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n, q;
    cin >> n >> q;
    vector<int> a(n + 1);
    vector<int> diff(n + 2, 0);  // 初始化差分数组
    // 读取初始球数,构建差分数组
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        diff[i] += a[i] - (i == 1 ? 0 : a[i-1]);
    }
    // 处理每次操作
    while (q--) {
        int l, r, c;
        cin >> l >> r >> c;
        diff[l] += c;
        if (r + 1 <= n) diff[r + 1] -= c;
    }
    // 根据差分数组还原最终数组
    for (int i = 1; i <= n; ++i) {
        diff[i] += diff[i - 1];
        cout << diff[i] << (i == n ? '\n' : ' ');
    }
    return 0;
}

给定一个含有n个元素的数组,其中每个元素代表一个球筐中球的初始数量。接着,程序会接受q次更新操作,每次操作指定一个范围[l, r],以及一个值c,程序需要将这个范围内的每个球筐的球数增加c。最终程序输出在所有操作执行完成后,每个球筐中的球数量。

为了有效地实现这个功能,程序使用了差分数组技术。差分数组的主要优势是能在O(1)的时间复杂度内实现对原始数组某个区间内所有元素的同量增加或减少。

代码分析:

4. int main() {
5.     int n, q;

main函数是程序的入口点,定义了两个整数变量nq,分别代表球筐的数量和操作的次数。

6.     cin >> n >> q;

这行代码从标准输入读取这两个变量的值。

7.     vector<int> a(n + 1);
8.     vector<int> diff(n + 2, 0);

定义了两个整数类型的向量adiffa用于存储每个球筐的初始球数。diff是差分数组,其中每个元素初始化为0,其容量设置为n+2,这样即使对于最后一个球筐进行操作时,也不会越界。

9.     // 读取初始球数,构建差分数组
10.    for (int i = 1; i <= n; ++i) {
11.        cin >> a[i];
12.        diff[i] += a[i] - (i == 1 ? 0 : a[i-1]);
13.    }

这个循环读取初始的球数,并初始化差分数组diff。对于差分数组而言,第一个元素就是原数组的第一个元素的值,后续元素diff[i]代表a[i]a[i-1]的差值。

14.    // 处理每次操作
15.    while (q--) {
16.        int l, r, c;
17.        cin >> l >> r >> c;
18.        diff[l] += c;
19.        if (r + 1 <= n) diff[r + 1] -= c;
20.    }

这个循环处理每次更新操作。对于每次操作,我们只更新差分数组的l和r+1位置。这样做的效果是,在后续计算前缀和时,[l, r]区间内的每个元素都会被正确地增加c

21.    // 根据差分数组还原最终数组
22.    for (int i = 1; i <= n; ++i) {
23.        diff[i] += diff[i - 1];
24.        cout << diff[i] << (i == n ? '\n' : ' ');
25.    }

这个循环基于差分数组计算最终的球的数量(即还原数组a),并将其打印出来。每个元素的值都是它自己加上前一个元素的值(这实际上是计算前缀和的过程)。

这段代码利用差分数组处理区间更新操作,无需对每个区间的元素逐一进行操作,从而将时间复杂度从O(q*n)降低到O(n+q)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/351397.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

shell编程之循环语句与函数

一 echo命令 echo -n 表示不换行输出 echo -e 表示输出转义符 常用的转义符 二 date date查看当前系统时间 -d 你描述的日期&#xff0c;显示指定字符串所描述的时间&#xff0c;而非当前时间 %F 完整日期格式&#xff0c;等价于 %Y-%m-%d % T 时间&#xff08;24小时…

提升工作效率,畅享便捷PDF编辑体验——Adobe Acrobat Pro DC 2023

作为全球领先的PDF编辑软件&#xff0c;Adobe Acrobat Pro DC 2023将为您带来前所未有的PDF编辑体验。无论您是个人用户还是企业用户&#xff0c;Adobe Acrobat Pro DC 2023将成为您提高工作效率、简化工作流程的得力助手。 一、全面编辑功能 Adobe Acrobat Pro DC 2023提供了…

硬件知识(1) 手机的长焦镜头

#灵感# 手机总是配备好几个镜头&#xff0c;研究一下 目录 手机常配备的摄像头&#xff0c;及效果举例 长焦的焦距 焦距的定义和示图&#xff1a; IPC的焦距和适用场景&#xff1a; 手机常配备的摄像头&#xff0c;及效果举例 以下是小米某个手机的摄像头介绍&#xff1a…

再学http

HTTP状态码 1xx 信息性状态码 websocket upgrade 2xx 成功状态码 200 服务器已成功处理了请求204(没有响应体)206(范围请求 暂停继续下载) 3xx 重定向状态码 301(永久) &#xff1a;请求的页面已永久跳转到新的url302(临时) &#xff1a;允许各种各样的重定向&#xff0c;一般…

UE5 Chaos系统 学习笔记

记得开插件&#xff1a; 1、锚点场&#xff08;构造场&#xff09; 在锚点场范围内的物体静止且不被其他力场损坏 需要在Geometry Collection的初始化场把构造场设置过去 2、ClusterStrain 破裂效果的力 3、DisableField chaos破裂后的模拟物理在绿色范围内禁止行为和模拟物…

Mac中java jdk、android sdk、flutter sdk目录

1、Java JDK 目录 &#xff08;1&#xff09;官网下载的 Java JDK Java JDK下载官网 /Library/Java/JavaVirtualMachines&#xff08;2&#xff09;Android Studio下载的 Java JDK /Users/用户名/Library/Java/JavaVirtualMachines2、Android SDK 目录 /Users/用户名/Libr…

STM32第一节——初识STM32

1 硬件介绍 1.1 硬件平台 配套硬件&#xff1a;以野火的STM32 F1霸道开发板为平台&#xff0c;若用的是别的开发板&#xff0c;可自己进行移植。 1.2 什么是STM32 STM32是由意法半导体&#xff08;STMicroelectronics&#xff09;公司推出的一系列32位的ARM Cortex-M微控制…

【数据库】聊聊explain如何优化sql以及索引最佳实践

在实际的开发中&#xff0c;我们难免会遇到一些SQL优化的场景&#xff0c;虽然之前也看过周阳的课程&#xff0c;但是一直没有进行细心的整理&#xff0c;所以本篇会进行详细列举explain的相关使用&#xff0c;以及常见的索引最佳实践&#xff0c;并通过案例进行讲解。 数据准…

Python学习之路-Django基础:PythonWeb

Python学习之路-Django基础:PythonWeb Python Web 框架要点 处理流程 图片来源于未来的小牛的CSDN博客 意义 用于搭建Web应用程序&#xff0c;免去不同Web应用相同代码部分的重复编写&#xff0c;只需关心Web应用核心的业务逻辑实现 Web应用程序的本质 接收并解析HTTP请求…

【七、centos要停止维护了,我选择Almalinux】

搜索镜像 https://developer.aliyun.com/mirror/?serviceTypemirror&tag%E7%B3%BB%E7%BB%9F&keywordalmalinux dvd是有界面操作的&#xff0c;minimal是最小化只有命里行 镜像下载地址 安装和centos基本一样的&#xff0c;操作命令也是一样的&#xff0c;有需要我…

搞定App关键词和评论

从关键词优化的三大基本概念走起&#xff01; 关联性 优化师一般如何选择关联性高的关键词呢&#xff1f; 主要思路如下&#xff1a;品牌词-关联词-竞品词-竞品关键词&#xff0c;优先级从前到后依次降低&#xff0c;通过ASO优化工具筛选出合适的关键词。做ASO有一个好处就是…

实体店怎么引流推广?实体店铺引流推广方法

随着互联网的发展&#xff0c;越来越多的实体店面临着客源流失的问题。为了吸引更多的顾客&#xff0c;实体店需要采取有效的引流推广方法。那么实体店怎么引流推广呢&#xff1f;下面分享一些实体店铺引流推广方法。 1、优惠券 优惠券有以下好处&#xff1a; ①拉新&#x…

Github配置2FA认证

Github配置2FA认证 Github官方声明&#xff1a;从 2023 年 3 月开始到 2023 年底&#xff0c;GitHub 将逐渐开始要求在 GitHub.com 上贡献代码的所有用户启用一种或多种形式的双因素身份验证 (2FA)。 如果你在符合条件的组中&#xff0c;当选择该组进行注册时&#xff0c;将收到…

Ubuntu 22.04 安装tomcat

tomcat是常用的Java服务容器,这篇文章我们就来讲讲如何安装它。 更新软件包 首先是更新软件包,这是最常规的操作 sudo apt update 然后是开始安装,不多一会就可以安装好了 sudo apt install tomcat9 然后看一下状态 sudo systemctl status tomcat9 发现虽然启动了,但…

Qt下使用QWebEngineView实现百度地图的显示

文章目录 前言一、前期准备二、HTML文件创建三、实现步骤四、示例完整代码总结 前言 本文讲述了在Qt下使用QWebEngineView来加载HTML页面&#xff0c;实现该需求是需要连接网络的&#xff0c;这里进行了百度地图的嵌入显示&#xff0c;主要内容将结合相应的示例进行讲解&#…

AWS免费套餐——云存储S3详解

文章目录 前言一、为什么选择S3二、费用估算三、创建S3云存储注册账户登录账户创建存储桶关于官网相关文档 总结 前言 不论个人还是企业&#xff0c;日常开发中经常碰到需要将文档、安装包、日志等文件数据存储到服务器的需求。往常最常用的是云服务器&#xff0c;但是仅仅承担…

批量数据之DataX数据同步

文章目录 1 DataX1.1 引言1.2 DataX 简介1.3 核心1.3.1 DataX3.0 框架设计1.3.2 DataX3.0 核心架构 1.4 使用 DataX 实现数据同步1.4.1 准备安装1.4.2 Linux 上安装 DataX 软件1.4.3 DataX 基本使用1.4.4 MySQL 数据库1.4.4.1 安装1.4.4.2 准备同步1.4.4.3 创建存储过程&#x…

C# 设置一个定时器函数

C#中&#xff0c;创建设置一个定时器&#xff0c;能够定时中断执行特定操作&#xff0c;可以用于发送心跳、正计时和倒计时等。 本文对C#的定时器简单封装一下&#xff0c;哎&#xff0c;以方便定时器的创建。 定义 using Timer System.Timers.Timer;class SetTimer {Timer …

Nginx编译安装以及负载均衡配置(Ubuntu 22.04)

目录 Nginx编译安装以及负载均衡配置 Ubuntu 22.04.1 LTS 编译安装 nginx-1.22.1 1.安装依赖包 2. 下载nginx 3. 编译安装 报错解决 解决问题2 4.安装 5启动Nginx&#xff1a; 负载均衡 负载均衡算法 轮询 加权负载均衡 ip_hash算法 算法进行配置演示 加权负载均衡 轮询 IP 哈希…

如何提高记忆力?

许多学员经常问我&#xff1a;为什么您的记忆力那么好&#xff1f;有没有什么方法&#xff0c;可以提高记忆力&#xff1f; 今天&#xff0c;我想好好聊聊这个问题。 当然&#xff0c;学习和记忆&#xff0c;是一个巨大的话题。这篇文章只是一个初探。希望能帮你打开一些视野&a…