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

news2024/11/17 11:28:10

在这里插入图片描述

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

#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.coloradmin.cn/o/1413961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM-字节码应用

一、字节码的应用远超你的想象 二、ASM介绍与读取字节码实战 用CoreAPI解析和TreeAPI都能做字节码解析&#xff0c;区别&#xff0c;TreeAPI必须读取完整字节码信息&#xff0c;才能做解析。 下面代码&#xff0c;使用CoreAPI做解析&#xff1a; package asm;public class MyM…

牛客NC16640纪念品分组(C++)

题目链接 实现方法 本题为简单的贪心问题。 将所有纪念品价值排序&#xff1b;使用双指针判断最大和最小的价值之和是否小于上限&#xff0c;若小于上限则取两个&#xff0c;否则取价值较大的一个物品&#xff1b;记录未分组的纪念品数量&#xff0c;若数量为0则跳出循环&…

《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换(5)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第3章 PCI总线的数据交换&#xff08;4&#xff09; 3.2 PCI设备的数据传递 PCI设备的数据传递使用地址译码方式&#xff0c;当一个存储器读写总线事务到达PCI总线时&#xff0c;在这条总线上的所有PCI设…

Java入门高频考查基础知识7-深入挖掘Java集合框架的奇幻世界2(39题2.8万字参考答案)

Java 集合是 Java 编程中至关重要的组成部分&#xff0c;它为开发者提供了丰富、灵活、高效的数据结构和算法。无论是初学者还是有经验的开发者&#xff0c;在使用 Java 进行编程时都会频繁地接触到集合框架。这篇文章将深入探讨 Java 集合的重要性&#xff0c;以及为什么它对于…

写静态页面——魅族声学_前端页面练习

1、效果: 1、html代码: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>魅族声学</titl…

STM32单片机项目之多功能智能小车硬件设计

基于STM32单片机多功能智能小车功能说明&#xff1a; TFTLCD显示按键LVGL&#xff08;菜单、小车工作模式选择、设置&#xff09;手机蓝牙遥控模式射频手柄遥控模式5路红外寻迹模式超声波避障模式语音播报低功耗控制 硬件原理图设计 单片机最小系统&#xff1a; 由于要使用…

初识MQRabbitMQ快速入门

一、同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&#xff0c;但是你却不能…

项目中日历管理学习使用

一些项目中会有日历或日期设置&#xff0c;最基本的会显示工作日&#xff0c;休息日&#xff0c;节假日等等&#xff0c;下面就是基于项目中的日历管理功能&#xff0c;要显示工作日&#xff0c;休息日&#xff0c;节假日 效果图 获取国家法定节假日工具类 public class Holi…

2024年,我与CSDN的邂逅之旅:一段燃烧激情、成就梦想的博客专家之路

文章目录 初入CSDN知识分享的本质什么有用学什么 成为博客专家的经历成为博客专家有什么好处实际好处隐形好处 今天获得了CSDN认证的博客专家&#xff0c;感觉很开心~分享一下这个始末。分享一下我和CSDN的5年邂逅。 初入CSDN 进入CSDN已经五年了&#xff0c;大一开始写博客&a…

Prometheus 架构全面解析

在本指南中&#xff0c;我们将详细介绍 Prometheus 架构。 Prometheus 是一个用 Golang 编写的开源监控和告警系统&#xff0c;能够收集和处理来自各种目标的指标。您还可以查询、查看、分析指标&#xff0c;并根据阈值收到警报。 此外&#xff0c;在当今世界&#xff0c;可观…

21.云原生之GitLab pipline语法实战(CI基础)

云原生专栏大纲 文章目录 gitlab-ci.yml 介绍GitLab中语法检测gitlab-ci.yml 语法job定义作业before_script和after_scriptstages定义阶段tages指定runnerallow_failure运行失败when控制作业运行retry重试timeout超时parallel并行作业only & exceptrulescache 缓存cache:p…

Windows10系统任务栏变小怎么处理

首先&#xff0c;邮件任务栏&#xff0c;点击任务栏设置&#xff1b; 然后&#xff0c;将小任务栏 使能关闭&#xff08;图中为打开状态&#xff09;&#xff1b; 或者&#xff0c;你也可以取消锁定任务栏&#xff0c;然后在任务栏的边缘&#xff0c;进行上下拉拖动&#xff…

记签名机制

签名过程&#xff1a; 首先将数据源通过摘要算法获取到数字摘要 对数字摘要用私钥进行加密得到签名 将原始消息 以及签名发送给消息接收方 接收方用公钥解密得到数字摘要 用同样的摘要算法将原始消息进行计算 比较得到的数字摘要与解密后的是否一致 Android学习笔记——Androi…

Android源码设计模式解析与实战第2版笔记(二)

第二章 应用最广的模式 — 单例模式 单例模式的定义 确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。 单例模式的使用场景 确保某个类有且只有一个对象的场景&#xff0c;避免产生多个对象消耗过多的资源&#xff0c;或者某种类型的对象只应…

水文模型SWMM与LisFlood耦合(pdf文档、软件见资源)

总技术路线图 INP生成图解 文献&#xff1a;面向服务的Web-SWMM构建研究 regardingINP为ArcGIS Pro项目 1.SWMM模型数据准备与参数设置 1.子汇水区 文件位于&#xff1a;beforeGenerateINP/generateSub.py&#xff08;一级划分&#xff09; 问题&#xff1a; 水文分析阈值划…

85 总结一下最近遇到的一些 jar发布 相关的知识

前言 呵呵 最近有一些构建服务, 发布服务的一些需求 我们这里的服务 一般来说是 java application, spring boot application 针对发布, 当然最好是 增量发布, 尽量的减少需要传递给 发布服务器 的资源的大小 比如 我的这个 java application, 可能会存在很多依赖, 常规…

Arduino开发实例-HTU21D温度和湿度传感器使用

HTU21D温度和湿度传感器使用 文章目录 HTU21D温度和湿度传感器使用1、HTU21D介绍2、硬件接线3、代码实现本文将详细介绍如何使用搭载来自瑞士 MEAS 的低成本、易于使用、高精度的HTU21D数字温度和湿度传感器模块。 1、HTU21D介绍 HTU21D传感器模块尺寸小,几乎可以安装在任何东…

MySQL连表操作之一对多

MySQL连表操作之一对多 目录 引入外键 Navicat创建外键使用外键SQL命令创建外键代码删除外键代码增加外键通过外键进行数据操作 正文 回到顶部 引入 当我们在数据库中创建表的时候&#xff0c;有可能某些列中值内容量很大&#xff0c;而且重复。 例子&#xff1a;创建一个…

磁盘挂载过程

硬盘 - 机械 HDD----便宜---这个&#xff0c;企业中更多- 固态 SSD----快SSD采用电子存储介质进行数据存储和读取的一种技术&#xff0c;突破了传统机械硬盘的性能瓶颈&#xff0c; 拥有极高的存储性能&#xff0c;被认为是存储技术发展的新星。 与传统硬盘相比&#xff0c;SSD…

系统架构演变

1.1系统架构的演变 2008年以后&#xff0c;国内互联网行业飞速发展&#xff0c;我们对软件系统的需求已经不再是过去”能用就行”这种很low的档次了&#xff0c;像抢红包、双十一这样的活动不断逼迫我们去突破软件系统的性能上限&#xff0c;传统的IT企业”能用就行”的开发思…