【蓝桥杯】2023省赛H题

news2024/12/30 2:55:06

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

题目

【问题描述】

        给定一个长度为 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.coloradmin.cn/o/1161696.html

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

相关文章

Day 5 登录页及路由 (三) 基于axios的API调用

系列文章目录 本系列记录一下通过Abp搭建后端&#xff0c;VueElement UI Plus搭建前端&#xff0c;实现一个小型项目的过程。 Day 1 Vue 页面框架Day 2 Abp框架下&#xff0c;MySQL数据迁移时&#xff0c;添加表和字段注释Day 3 登录页以及路由 (一&#xff09;Day 4 登录页以…

三菱MC协议及报文格式详解

一、简介 三菱MC协议是指三菱电机公司&#xff08;Mitsubishi Electric&#xff09;使用的一种通信协议&#xff0c;用于在三菱PLC&#xff08;可编程逻辑控制器&#xff09;和其他设备之间进行数据交换和通信。 三菱MC协议有多个版本&#xff0c;最常见的是MC-Protocol&…

uniapp原生插件之安卓USB扫码枪扫码插件

插件介绍 安卓USB扫码枪扫码&#xff0c;监听USB扫码枪 插件地址 安卓USB扫码枪扫码插件 - DCloud 插件市场 超级福利 uniapp 插件购买超级福利 插件方法 开启监听&#xff1a;setListener 重要说明&#xff1a;当开启监听后当前窗体不可点击&#xff0c;点击无任何…

最新夸克网盘 迅雷网盘 UC网盘cpa拉新推广教程 推广申请渠道

最近很多朋友都想做夸克网盘、迅雷网盘、uc网盘的推广 但是找不到申请渠道 可以通过”聚量推客“进行申请&#xff0c;一手渠道价格高 数据好 接下来&#xff0c;让我们开始夸克网盘、迅雷网盘、UC网盘的开通操作教程&#xff1a; 目前市面上&#xff0c;这三家网盘统一的地…

mathtype最新7.4.10.53绿色版本下载

MathType&#xff0c;一款功能强大的数学公式编辑器&#xff0c;一直深受广大用户的喜爱&#xff0c;给很多的理科生和各位学者、教研机构等带来巨大帮助。 软件的主要使用用户为初中、高中以及大学的学生、老师&#xff0c;理工科专业工作者&#xff0c;可用于编辑数学试卷、…

Python画图之动态爱心

Python画出动态爱心&#xff08;有趣小游戏&#xff09; 一、效果图二、Python代码 一、效果图 二、Python代码 import random from math import sin, cos, pi, log from tkinter import *CANVAS_WIDTH 640 # 画布的宽 CANVAS_HEIGHT 480 # 画布的高 CANVAS_CENTER_X CANV…

CoCa论文笔记

摘要 计算机视觉任务中&#xff0c;探索大规模预训练基础模型具有重要意义&#xff0c;因为这些模型可以可以极快地迁移到下游任务中。本文提出的CoCa&#xff08;Contrastive Captioner&#xff09;&#xff0c;一个极简设计&#xff0c;结合对比损失和captioning损失预训练一…

Spring中的核心概念

&#x1f388;个人公众号:&#x1f388; :✨✨✨ 可为编程✨ &#x1f35f;&#x1f35f; &#x1f511;个人信条:&#x1f511; 知足知不足 有为有不为 为与不为皆为可为&#x1f335; &#x1f349;本篇简介:&#x1f349; 本篇记录Spring中的核心概念&#xff0c;如有出入还…

QQ文件怎么恢复?3个方法解决文件丢失问题!

无论是在学习还是工作中&#xff0c;我们都有可能需要接触到QQ这款软件。QQ传输文件十分方便&#xff0c;因此仍然有许多小伙伴喜欢用QQ来发送各种类型的文件。对于大家来说&#xff0c;最害怕的莫过于重要的文件出现丢失的情况。 当我们发现QQ文件意外删除或者过期时该怎么办…

【第28例】IPD体系进阶 | 需求管理:需求实现过程

目录 简介 内容详解 CSDN学院相关推荐 作者简介 简介 继续 IPD 体系中的需求管理相关的专题。 先来看看整个需求管理涉及的过程内容: 需求管理流程主要包含五个阶段: 需求收集; 需求分析; 需求分发/分配;

软件开发项目文档系列之九如何撰写测试方案

测试方案是任何软件开发和项目实施过程中的重要组成部分&#xff0c;它提供了确保系统质量和可靠性的蓝图。通过明确定义测试的范围、策略、资源和计划&#xff0c;测试方案确保项目团队明白如何有效地执行测试&#xff0c;并提供客观的评估和反馈。它有助于降低项目风险&#…

【PyTorch 卷积】实战自定义的图片归类

前言 卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络&#xff0c;是深度学习的代表算法之一&#xff0c;它通过卷积层、池化层、全连接层等结构&#xff0c;可以有效地处理如时间序列和图片数据等。关于卷积的概念网络上也比较多&#xff0c;这里就不一一描述了。…

苹果手机黑屏了怎么恢复正常?这些修复方法记得收藏好!

苹果手机黑屏是一种常见的手机故障&#xff0c;很多人在遇到手机突然黑屏的情况时感到束手无策。手机黑屏会干扰用户的正常使用&#xff0c;带来不便&#xff0c;并给用户带来不好的体验。苹果手机黑屏了怎么恢复正常&#xff1f;本文将为大家详细介绍修复苹果手机黑屏的方法。…

3.网络之UDP

UDP协议 文章目录 UDP协议1. UDP概述2. UDP报文格式3. UDP传输限制4. UDP校验和4.1 CRC 循环冗余校验算法4.2 md5 校验算法 1. UDP概述 UDP&#xff08;UserDatagramProtocol&#xff09;是一个简单的面向消息的传输层协议&#xff0c;尽管UDP提供标头和有效负载的完整性验证&a…

Linux指令【下】

目录 时间 date 时间戳 cal 查找 find which whereis grep uniq 打包压缩 zip/unzip tar uname 其他热键 关机 系统互传 linux和Windows Linux和Linux 时间 date 用法&#xff1a;date[option] [format] 选项功能%Y年%d日%m月%H时%M分%s秒%X%H:%M%S%F%Y-%…

「Java开发指南」如何用MyEclipse搭建Spring MVC应用程序?(一)

本教程将指导开发者如何生成一个可运行的Spring MVC客户应用程序&#xff0c;该应用程序实现域模型的CRUD应用程序模式。在本教程中&#xff0c;您将学习如何&#xff1a; 从数据库表的Scaffold到现有项目部署搭建的应用程序 使用Spring MVC搭建需要MyEclipse Spring或Bling授…

【MySQL数据库】 一

本文主要介绍了关系型数据库和非关系数据库的区别,以及主流的关系型数据库mysql的安装 , 以及mysql数据库客户端-服务器的结构. 一.数据库的分类 我们可以简单的把数据库看成是一类软件 数据库分成两大类 1.关系型数据库 通常以表格的方式来组织 2.非关系型数据库 通常以键值…

电脑关机很慢?这几个优化技巧请收好!

当我们使用电脑时&#xff0c;一个令人不快的问题是&#xff0c;关机变得异常缓慢。电脑在关机时可能需要很长时间&#xff0c;甚至让人感到沮丧。这不仅是时间浪费&#xff0c;还可能表明系统存在问题。在本文中&#xff0c;我们将介绍四种解决电脑关机很慢的方法&#xff0c;…

怎么向国外客户催单?这样做既有效又不让客户反感

外贸业务员接单的过程其实是一场利益博弈的过程&#xff0c;而且外贸销售永远靠结果说话&#xff0c;所以无论你的客户如何承诺&#xff0c;甚至有时候都已经签订了定单合同做了PI&#xff0c;但客户钱没到账公司&#xff0c;一切就有可能归零。 01 心态一定要稳住 对于每个有…

如何在业务代码中优雅地使用责任链模式

通过使用责任链模式&#xff0c;我们可以更加灵活和优雅地处理请求&#xff0c;降低代码之间的耦合度&#xff0c;提高代码的可维护性和可扩展性。在一些具有复杂业务逻辑或需要动态处理请求的场景下&#xff0c;使用责任链模式将是一个很好的选择。本文将通过一个具体的示例来…