acwing_5722_十滴水

acwing_5722_十滴水

下面这篇大佬的题解属实是把指针用明白了,可以好好理解一下:

原题解连接:AcWing 5722. 一个简单模拟实现 - AcWing

map/unordered_map的用法:见收藏夹

#include<iostream>
#include<unordered_map>
#include<map>

using namespace std;

//有水的格子
struct Gz {
    int drop;  //水的数量
    Gz *left;  //左边的有水的格子
    Gz *right; //右边的有水的格子
};

int main() {
    int c, m, n;
    cin >> c >> m >> n;
    unordered_map<int, Gz *> mp;    //用来查找每次操作对应编号p的格子的指针
    Gz *l = nullptr;
    int msize = m;                 //目前有水格子数
    int x, w, p;

    //不用unordered_map的原因,给输入的m排序,以使left和right有意义(在csp网站提交的时候一个没过,找了半天才发现m是可以乱序的...)
    map<int, int> mmp;//为什么这里不用数组呢?
    //我的看法是有水的格子相对于所有的格子来说很少,如果将所有的格子都遍历一遍,那么时间复杂度将是不可接受的。

    for (int i = 0; i < m; ++i) {
        cin >> x >> w;
        mmp[x] = w;
    }

    //对着输入存信息
    for (auto i = mmp.begin(); i != mmp.end(); ++i) {
        if (i == mmp.begin()) {
            Gz *t = new Gz;
            mp[i->first] = t;
            t->drop = i->second;
            t->left = l;
            t->right = nullptr;
            l = t;
        } else {
            Gz *t = new Gz;
            mp[i->first] = t;
            t->drop = i->second;
            t->left = l;
            t->right = nullptr;
            l->right = t; //如果格子不是第一个有水的格子,需要多做一步处理
            l = t;
        }
    }

    //对每次操作进行模拟
    for (int i = 0; i < n; ++i) {
        cin >> p;
        Gz *t = mp[p];
        t->drop++;

        //未到4则直接返回目前有水格子数
        if (t->drop <= 4) {
            cout << msize << endl;
        } else {
            while (t) {
                //如果左节点存在则更新左节点
                if (t->left) {
                    t->left->drop++;
                    t->left->right = t->right;
                }
                //如果右节点存在则更新右节点
                if (t->right) {
                    t->right->drop++;
                    t->right->left = t->left;
                }
                msize--;    //删除当前格子

                //如果左节点超过了4,则先跳转到左节点执行操作
                if (t->left && t->left->drop > 4) {
                    t = t->left;
                }
                    //左节点无需操作再检查右结点
                else if (t->right && t->right->drop > 4) {
                    // 注意这里为什么要用else if
                    t = t->right;
                } else {
                    break;
                }
            }
            cout << msize << endl;
        }
    }

    return 0;
}

image-20241205192456444

这份答案只能过8/11,看来还需要完善~

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

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

相关文章

零基础学AI大模型要多久?真的能学会吗?

很多人都对学习AI大模型抱有疑问&#xff0c;特别是那些完全没有编程基础的朋友。其实&#xff0c;从零开始学习AI大模型是可以做到的&#xff0c;关键在于你的学习方法和投入的时间。下面我们来详细聊一聊这个问题。 学习时间 自学&#xff1a; 如果你选择自学&#xff0c;…

攻防靶场(34):隐蔽的计划任务提权 Funbox1

目录 1. 侦查 1.1 收集目标网络信息&#xff1a;IP地址 1.2 主动扫描&#xff1a;扫描IP地址段 1.3 搜索目标网站 2. 初始访问 2.1 有效账户&#xff1a;默认账户 2.2 利用面向公众的应用 2.3 有效账户&#xff1a;默认账户 3. 权限提升 3.1 计划任务/作业&#xff1a;Cron 靶场…

Java高频面试之SE-11

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本牛马baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; Java中是引用传递还是值传递&#xff1f; 在 Java 中&#xff0c;方法参数传递是通过 值传递 的方式实现的&#xff0c;但这可能会引起一…

2.两数相加--力扣

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …

与Linux的设备树文件(dts)的基础知识【编写和操作】

编写相关 01-双引号中的内容表示字符串,<>中的内容表示数值 示例如下&#xff1a; / {swh_led0 {compatible "swh_leddrv";pin <0x00030001>;};.......};compatible的具体内容为字符串swh_leddrv&#xff0c;而pin的值为数值0x00030001。 操作相关…

STM32第6章、WWDG

一、简介 WWDG&#xff1a;全称Window watchdog&#xff0c;即窗口看门狗&#xff0c;本质上是一个能产生系统复位信号和提前唤醒中断的计数器。 特性&#xff1a; 是一个递减计数器。 看门狗被激活后&#xff0c; 当递减计数器值从 0x40减到0x3F时会产生复位&#xff08;即T6位…

国产fpga nvme ip高速存储方案设计

国产高速存储方案主要是使用nvme ip实现高速存储方案&#xff0c;nvme ip采用纯verilog语言实现&#xff0c;用户拿到nvme ip使用起来也很简单。 先看看效果如 zu7eg板子&#xff0c;这个芯片支持pcie3.0 x4. zynq 7045板子只支持pcie 2.0 x4 速度测试&#xff0c;测试nvme …

《框架程序设计》复习题解析-1

目录 单选题 1.以下关于Maven说法错误的是&#xff1f;&#xff08; &#xff09;。 2.在项目的开发过程中&#xff0c;MyBatis承担的责任是( ) 3.当项目引用依赖的范围设置为以下&#xff08; &#xff09;选项时&#xff0c;表示依赖在编译时是必需的&#xff0c;但在运…

STM32F103的ADC通道映射

ADC通道映射 STM32F103带3个ADC控制器&#xff0c;一共支持23个通道&#xff0c;包括21个外部和2个内部信号源。ADC1控制器最多有18个通道&#xff0c;包括16个外部和2个内部信号源。 ADC1和ADC2的16个外部通道相同&#xff0c;且ADC1和ADC2共用一个系统中断向量&#xff0c;A…

Vue2+OpenLayers使用Overlay实现点击获取当前经纬度信息(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 关键参数&#xff1a; 实现思路&#xff1a; 核心代码&#xff1a; 完整代码&#xff1a; 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 覆盖物&#xff08;Overlay&#xf…

[Transformer] The Structure of GPT, Generative Pretrained Transformer

The Structure of Generative Pretrained Transformer Reference: The Transformer architecture of GPT models How GPT Models Work

【芯片封测学习专栏 -- Substrate | RDL Interposer | Si Interposer | 嵌入式硅桥(EMIB)详细介绍】

请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 OverviewSubstrate&#xff08;衬底或基板&#xff09;Substrate 定义Substrate 特点与作用Substrate 实例 RDL Interposer&#xff08;重布线层中介层&a…

基于单片机的无线气象仪系统设计(论文+源码)

1系统方案设计 如图2.1所示为无线气象仪系统设计框架。系统设计采用STM32单片机作为主控制器&#xff0c;结合DHT11温湿度传感器、光敏传感器、BMP180气压传感器、PR-3000-FS-N01风速传感器实现气象环境的温度、湿度、光照、气压、风速等环境数据的检测&#xff0c;并通过OLED1…

【JavaWeb】JavaWeb入门之Tomcat详解

目录 1.Java Web前奏 1.1.C/S结构 1.2.B/S结构 1.3.静态网页和动态网页 1.4.常见的网页 1.5.Web服务器 2.HTTP协议 2.1.HTTP协议概念 2.2.无状态协议 2.3.HTTP1.0和HTTP1.1 2.4.请求协议和响应协议 2.5.请求协议 2.5.1.GET请求 2.5.2.POST请求 2.6.响应协议 1.J…

【SpringBoot】@Value 没有注入预期的值

问题复现 在装配对象成员属性时&#xff0c;我们常常会使用 Autowired 来装配。但是&#xff0c;有时候我们也使用 Value 进行装配。不过这两种注解使用风格不同&#xff0c;使用 Autowired 一般都不会设置属性值&#xff0c;而 Value 必须指定一个字符串值&#xff0c;因为其…

nginx反向代理和负载均衡的区别

1、反向代理&#xff0c;不需要服务器池&#xff0c;直接代理某台服务器 location / {proxy_pass http://192.168.18.201;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr; }proxy_set_header Host $host; …

uniApp通过xgplayer(西瓜播放器)接入视频实时监控

&#x1f680; 个人简介&#xff1a;某大型国企资深软件开发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…

数据结构与算法之二叉树: LeetCode 701. 二叉搜索树中的插入操作 (Ts版)

二叉搜索树中的插入操作 https://leetcode.cn/problems/insert-into-a-binary-search-tree/description/ 描述 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树返回插入后二叉搜索树的根节点。 输入数据 保…

vue el-table 数据变化后,高度渲染问题

场景&#xff1a;el-table设置了height属性&#xff0c;但是切换查询条件后再次点击查询重新获取data时&#xff0c;el-table渲染的高度会有问题&#xff0c;滚动区域变矮了。 解决办法&#xff1a;使用doLayout方法‌&#xff0c;在表格数据渲染后调用doLayout方法可以重新布局…

代码的形状:重构的方向

大概2周前写了一篇《代码的形状:从外到内的探索与实践》 涵树&#xff1a;代码的形状:从外到内的探索与实践 觉得这个话题还可以继续&#xff0c;它是一个从无形到有形的过程&#xff0c;而这个过程感觉就是王阳明先生说的“心即理”的探寻过程。 我讨论代码的形状&#xff…