【蓝桥杯】2023省赛H题

考察知识点:双向链表,小根堆                                                                                                       完整代码在文章末尾

题目

【问题描述】

        给定一个长度为 N 的整数数列: A1,A2,...,AN。你要重复以下操作 K 次 : 每次选择数列中最小的整数(如果最小值不止一个,选择最靠前的),将其删除。并把与它相邻的整数加上被删除的数值。
        输出 K 次操作后的序列。

【输入格式】

        第一行包括两个整数 N 和 K 。

        第二行包含 N 个整数,A1,A2,A3......,AN。

【输出格式】

        输出N - K 个整数,中间是用一个空格隔开,代表K次操作后的序列。

思路

根据题意可知,这个序列需要大量的删除,我们可以使用链表来实现。

1、定义一个结构体,同时声明一个结构体数组

a72db052730a42b5a53a70997b19a8ea.png

        其中data代表这个结构体储存的数据,before代表前驱节点,after代表后继节点,stu代表这个节点是否存在(stu = 1表示未被删除,stu = 0表示已经被删除)。

2、 建一个堆

55c4f28a347f4d28930250f01f7064a8.png

 c29b44aff5b549969dd7b9f7b00a2ded.png

        我们将节点的值与节点的索引放入堆中,使用时将节点值最小的节点弹出。(需要判定一下这个节点的值是否已经改变,如果已经改变则不能使用此节点)。

3、输入数据

d24d6f5b465d435cb76dc53a67eb83b5.png

        将数据输入,一个节点 i 初始时前驱索引为 i - 1,后继节点索引为 i + 1,状态初始化为1。同时将这个节点放入小根堆中。

4、进行整数删除操作

dbb42d8af82c413280c7a8e8f30845ab.png

        为方便操作使用 add 代表删除节点的索引,bef代表删除节点前驱的索引,aft代表删除节点后继的索引。

33647aad9dd54d9ca8fc17a624ae2df2.png

db32291434f0408ba062222d29a86242.png

        如果前驱节点不为0,则对前驱节点进行更新,将更新后的节点值与索引放入堆中。如果后继节点为≤n,则对后继节点进行更新,将更新后的节点值与索引放入堆中。

f29f825d0fa44dcba3e754bc1591b10f.png

        add节点已经被删除,将其状态值更新为0,表示该节点已经被删除。接着进行下次循环,直到删除k个节点为止。 

5、输出元素

f654dcbe48994dd682321be3d948e893.png

        这是最后一步 ,输出元素时要先根据stu值判断该节点是否存在,如果存在则输出,否则不输出。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 500010;
typedef pair<int,int> PII;
int n,k;
struct L{int data,before,after,stu;
}l[N];int32_t main()
{cin >> n >> k;priority_queue<PII,vector<PII>,greater<PII>> heap;for(int i = 1; i <= n; i ++){cin >> l[i].data;l[i].after = i + 1;l[i].before = i - 1;l[i].stu = 1;PII s = {l[i].data,i};heap.push(s);}while(k --){bool flag = true;PII t;while(flag){t = heap.top();heap.pop();if(l[t.second].data == t.first) flag = false;}int add = t.second;int bef = l[add].before;int aft = l[add].after;if(bef != 0){l[bef].data += l[add].data;l[bef].after = l[add].after;PII s1 = {l[bef].data,bef};heap.push(s1);}if(aft <= n){l[aft].data += l[add].data;l[aft].before = l[add].before;PII s2 = {l[aft].data,aft};heap.push(s2);}l[add].stu = 0;}for(int i = 1; i <= n; i ++){if(l[i].stu == 1)cout << l[i].data << " ";}return 0;
}

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

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

相关文章

下载安装各种版本的Vscode以及解决VScode官网下载慢的问题

下载指定版本 在Vscode官网 Vscode官网更新子页 这里的左侧栏点击其中一个会跳转到某个版本&#xff0c;或者在官网子页 https://code.visualstudio.com/updates的后面跟上需要的版本号即可完成目标版本下载页面的跳转 选择Linux里的ARM包不会自动下载而是跳转到另一个页面 …

【大模型应用开发教程】04_大模型开发整体流程 基于个人知识库的问答助手 项目流程架构解析

大模型开发整体流程 & 基于个人知识库的问答助手 项目流程架构解析 一、大模型开发整体流程1. 何为大模型开发定义核心点核心能力 2. 大模型开发的整体流程1. 设计2. 架构搭建3. Prompt Engineering4. 验证迭代5. 前后端搭建 二、项目流程简析步骤一&#xff1a;项目规划与…

Sync Folders Pro(文件夹数据同步工具)

Sync Folders Pro for Mac 是一款功能强大的文件夹同步工具&#xff0c;旨在帮助用户在 Mac 计算机和移动设备之间创建双向同步。这款软件支持各种文件系统和设备&#xff0c;如 iPhone&#xff0c;iPad&#xff0c;iPod&#xff0c;Android 等。通过这款软件&#xff0c;用户可…

【Spring Security】Spring Security 认证过程源码分析

项目启动 我们在前面有了解到可以在application.yml中配置用户名密码,那么可以猜想:肯定是在项目启动的时候加载的,我们通过鼠标点击 进入SecurityProperties,我们在User中的getName上打断点,这样项目启动的时候就可以走到这里 之后我们通过点击:Drop Frame可以往回走进…

基于白冠鸡算法的无人机航迹规划-附代码

基于白冠鸡算法的无人机航迹规划 文章目录 基于白冠鸡算法的无人机航迹规划1.白冠鸡搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用白冠鸡算法来优化无人机航迹规划。 1.白冠鸡…

设计模式——备忘录模式(Memento Pattern)

文章目录 一、备忘录模式定义二、例子2.1 菜鸟例子2.1.1 定义副本类2.1.2 定义对象2.1.3 定义CareTaker 类2.1.3 使用 2.2 JDK —— Date 三、其他设计模式 一、备忘录模式定义 类型&#xff1a; 行为型模式 目的&#xff1a; 保存一个对象的某个状态&#xff0c;以便在适当的…

数据库 存储引擎

存储引擎概念 在mysql当中数据库用不同的技术存储在文件中&#xff0c;每一种技术都是使用不同的存储引擎机制&#xff0c;索引技巧&#xff0c;锁定水平&#xff0c;以及最终提供的不同的功能和能力&#xff0c;这些就是我们说的存储引擎 主要功能 1mysql将数据存储在文件系…

C++ 单例模式

C 单例模式跟Java中的单例模式没什么区别 什么是单例? 单例模式确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例 什么时候使用单例 1个类里面的方法要在很多地方都使用到的时候建议使用单例。 单例的3个步骤&#xff0c;也是判断是否是单例…

Python爬取读书网的图片链接和书名并保存在数据库中

一个比较基础且常见的爬虫&#xff0c;写下来用于记录和巩固相关知识。 一、前置条件 本项目采用scrapy框架进行爬取&#xff0c;需要提前安装 pip install scrapy# 国内镜像 pip install scrapy -i https://pypi.douban.com/simple 由于需要保存数据到数据库&#xff0c;因…

安达发|APS生产排程解决五金制造企业的需求

在五金制造行业中&#xff0c;生产排程一直是一个非常重要的环节。然而&#xff0c;由于五金行业的特点和痛点&#xff0c;传统的生产排程方法往往难以满足企业的需求。本文将针对五金行业的痛点&#xff0c;探讨如何利用APS生产排程解决这些问题。 首先&#xff0c;我们需要了…

JAVA毕业设计109—基于Java+Springboot+Vue的宿舍管理系统(源码+数据库)

基于JavaSpringbootVue的宿舍管理系统(源码数据库)109 一、系统介绍 本系统前后端分离 本系统分为学生、宿管、超级管理员三种角色 1、用户&#xff1a; 登录、我的宿舍、申请调宿、报修申请、水电费管理、卫生检查、个人信息修改。 2、宿管&#xff1a; 登录、用户管理…

为机器学习算法准备数据(Machine Learning 研习之八)

本文还是同样建立在前两篇的基础之上的&#xff01; 属性组合实验 希望前面的部分能让您了解探索数据并获得洞察力的几种方法。您发现了一些数据怪癖&#xff0c;您可能希望在将数据提供给机器学习算法之前对其进行清理&#xff0c;并且发现了属性之间有趣的相关性&#xff0c…

图像配准之二:基于互信息

图像配准之二:基于互信息 1.互信息定义2.基于互信息的图像配准2.1 模板图片 I 1 I_1 I

谈一谈SQLite、MySQL、PostgreSQL三大数据库

每一份付出&#xff0c;必将有一份收货&#xff0c;就像这个小小的果实&#xff0c;时间到了&#xff0c;也就会开花结果… 三大数据库概述 SQLite、MySQL 和 PostgreSQL 都是流行的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;但它们在功能、适用场景和性…

maven配置

一、下载maven 下载地址 https://maven.apache.org/download.cgi二、安装maven tar xf apache-maven-3.9.5-bin.tar.gz mv apache-maven-3.9.5 /usr/local/maven ln -s /usr/local/maven/bin/mvn /usr/local/bin/安装成功 [rootp0-jiantou-scyyglpt-web01 ~]# mvn -v Apache…

Leetcode刷题详解——全排列

1. 题目链接&#xff1a;46. 全排列 2. 题目描述&#xff1a; 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],…

pcigo图床插件的简单开发

1.前言&#xff1a; 如果想写一个图床并且投入使用&#xff0c;那么&#xff0c;接入picgo一定是一个不错的选择。picgo有着windows&#xff0c;mac&#xff0c;linux等多个客户端版本。实用且方便。 2. 开发的准备&#xff1a; 2.0. 需要安装一个node node这里我就不详细说…

网络攻击的威胁仍在上升、企业该如何解决

近十年来&#xff0c;网络攻击的频率和规模不断增加&#xff0c;对网站和在线资产构成了严重威胁。解决网站被攻击的问题需要采用多层次的安全策略&#xff0c;其中CDN&#xff08;内容分发网络&#xff09;的防护角度发挥了关键作用。本文将通过通俗易懂的方式从CDN的角度分析…

3.线性神经网络-3GPT版

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 线性回归基础优化算法一、线性回归1、买房案例2、买房模型简化3、线性模型4、神经网络5、损失函数6、训练数据7、参数学习8、显示解9、总结 二、 基础优化算法1、梯度下降2、学习率3、小批量随机梯度下降4、批量大小5、…

ADAS数据平台实践总结

随着汽车智能化发展&#xff0c;adas数据分析变得越来越重要&#xff0c;此处根据个人认知对adas数据平台进行分析。 概述 adas数据一般来自于汽车厂商发布新车的前的 实际道路测试&#xff08;路试&#xff09;&#xff0c;相对于其他数据&#xff0c;具有如下特征&#xff1…