综教楼后的那个坑

(数据结构) 综教楼后的那个坑 (数据结构) 综教楼后的那个坑: 描述: 在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。   从横截面图来看,坑底成阶梯状,由从左至右的 1…N 个的平面构成(其中 1 ≤ N ≤ 100,000),如图:    每个平面 i 可以用两... 阅读详情

描述

  在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。

  从横截面图来看,坑底成阶梯状,由从左至右的 1..N 个的平面构成(其中 1 ≤ N ≤ 100,000),如图:

   *            * :
   *            * :
   *            * 8
   *    **      * 7
   *    **      * 6
   *    **      * 5
   *    ********* 4 <- 高度
   *    ********* 3
   ************** 2
   ************** 1
平面 |  1  |2|   3    | 

每个平面 i 可以用两个数字来描述,即它的宽度 Wi 和高度 Hi,其中 1 ≤ Wi ≤ 1,000、1 ≤ Hi ≤ 1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。灌水点设在坑底位置最低的那个平面,每分钟灌水量为一个单位(即高度和宽度均为 1)。随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。

  请你计算每个平面被水覆盖的时间。

   灌水              水满后自动扩散
        |                       |                           
      * |          *      *     |      *      *            *
      * V          *      *     V      *      *            *
      *            *      *    ....    *      *~~~~~~~~~~~~*
      *    **      *      *~~~~** :    *      *~~~~**~~~~~~*
      *    **      *      *~~~~** :    *      *~~~~**~~~~~~*
      *    **      *      *~~~~**~~~~~~*      *~~~~**~~~~~~*
      *    *********      *~~~~*********      *~~~~*********
      *~~~~*********      *~~~~*********      *~~~~*********
      **************      **************      **************
      **************      **************      **************
   4 分钟后           26 分钟后        50 分钟后
   平面 1 被水覆盖     平面 3 被水覆盖    平面 2 被水覆盖输入

  输入的第一行是一个整数 N,表示平面的数量。从第二行开始的 N 行上分别有两个整数,分别表示平面的宽度和高度。

输出

  输出每个平面被水覆盖的时间。

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 3↵
  2. 4 2↵
  3. 2 7↵
  4. 6 4↵
以文本方式显示
  1. 4↵
  2. 50↵
  3. 26↵
1秒1024KB0
测试用例 12以文本方式显示
  1. 3↵
  2. 4 2↵
  3. 6 4↵
  4. 2 7↵
以文本方式显示
  1. 4↵
  2. 18↵
  3. 50↵
1秒1024KB0

思路:

        画图考虑情况,注意填满之后需要重新择定最低处,将已经填好的地方和旁边等高的合并

代码如下:

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100010
typedef struct Hole
{
    int ordinal;//平台序号
    long long width;
    int hight;
    struct Hole *p;
    struct Hole *next;
} hole;
long ans[MAX_SIZE];
void PourAndConnect(hole *);

int main()
{
    long width, height;
    int N;
    scanf("%d", &N);
    hole *fir = (hole *)calloc(1, sizeof(hole));
    hole lwall = {0, 1000010, 0, NULL, fir};
    hole rwall = {0, 1000010, 0, NULL, NULL};
    hole *cur = fir, *pre = &lwall, *lowest = fir;
    for (int i = 0; i < N; i++)
    {
        scanf("%ld %ld", &width, &height);
        cur->width = width;
        cur->hight = height;
        cur->ordinal = i + 1;
        if (height < lowest->hight)
            lowest = cur;
        cur->p = pre;
        if (i == N - 1)
            cur->next = &rwall;
        else
            cur->next = (hole *)calloc(1, sizeof(hole));
        pre = cur;
        cur = cur->next;
    }
    PourAndConnect(lowest);
    for (int i = 0; i < N; i++)
        printf("%ld\n", ans[i + 1]);
    return 0;
}

void PourAndConnect(hole *lowest)//填坑并合并填好的平台,判断新的最低
{
    long long time = 0;
    while (lowest->p->width != 0 || lowest->next->width != 0)
    {
        ans[lowest->ordinal] = time + lowest->width;
        hole *low = lowest->p->hight < lowest->next->hight ? lowest->p : lowest->next;
        time += (low->hight - lowest->hight) * lowest->width;
        low->width += lowest->width;
        lowest->p->next = lowest->next;
        lowest->next->p = lowest->p;
        free(lowest);
        lowest = low;
        if (lowest->hight < lowest->p->hight && lowest->hight < lowest->next->hight)
            continue;
        else if (lowest->hight > lowest->p->hight)
            while (lowest->hight > lowest->p->hight)
                lowest = lowest->p;
        else
            while (lowest->hight > lowest->next->hight)
                lowest = lowest->next;
    }
    ans[lowest->ordinal] = time + lowest->width;
}

乐学平台数据结构考题精讲:约瑟夫问题、验证表、循环小数与BFS 在编程能力培养中,数据结构与算法不仅是理论基石,更直接决定代码在真实评测环境下的时空表现。约瑟夫问题、循环小数、二叉树验证与迷宫最短路径,正是检验线性表递推、哈希判重、中序有序性与BFS图遍历等核心原理的经典场景。理解约瑟夫递推公式可将时间复杂度从O(n*m)降至O(n),利用余数判重能高效定位循环节区间,通过递归边界验证二叉搜索树性质,借助广度优先搜索稳定求出网格地图最短步数。这些技术价值,在乐学、LeetCode等在线评测系统的严格数据测试下尤为重要,也是课程设计与编程竞赛的高频考点。本文基于北理工乐学 阅读详情

相关推荐

乐学平台四道数据结构经典题解析:约瑟夫环、验证表、循环小数与BFS

数据结构与算法是计算机编程的基石,无论是日常开发还是各类考试竞赛,都离不开对线性表、链表、哈希表、图等核心结构的深刻理解。约瑟夫问题作为经典模拟题,既考察循环链表的指针操作,又隐藏着高效的数学递推解法;验证表则通过线性表的插入删除操作,锻炼测试用例设计与边界处理能力。循环小数问题将长除法模拟与哈希表巧妙结合,揭示余数状态对判断循环的关键作用;综教楼后的坑则通过二维地图上的最短路径问题,体现BFS广度优先搜索在无权图中的强大价值。本文结合在北理工乐学平台的实际刷题经历,深入剖析这几道典型题目的求解思路、易错细

weixin_30231327的博客 291

数据结构 5.综教楼后的那个坑

数据结构 5.综教楼后的那个坑

c_h_q_的博客 512

北理工数据结构编程题解析:从约瑟夫问题到BFS迷宫搜索

数据结构与算法是计算机科学的核心基石,也是解决各类工程问题的关键工具。从线性表的增删操作到栈的括号匹配,从哈希表的状态判重到广度优先搜索的路径规划,每种结构都对应着特定的抽象思维与复杂度优化策略。在编程实践中,合理选择数据结构往往比代码技巧更决定成败。本文围绕北理工大二数据结构经典编程题,以约瑟夫问题、验证表、循环小数和迷宫搜索为例,深入剖析了循环链表、栈、哈希表及BFS的实际应用与踩坑细节,帮助读者建立“问题→结构→算法”的解题直觉。通过分析这些看似不同的题目背后的共性思维,读者可以举一反三,从容应对考试

weixin_33508411的博客 261

北理工-大二数据结构乐学编程题-约瑟夫问题、验证表、循环小数、综教楼后的坑...

北理工-大二数据结构乐学编程题-约瑟夫问题、验证表、循环小数、综教楼后的坑...

一只野指针.的博客 1946

超大规模AI集群跨数据中心互联:Scale-Across技术实现与部署实践

分布式系统通过将计算任务分散到多个节点协同执行,实现算力的横向扩展。其核心原理在于网络通信、数据同步和资源调度机制的技术协同。在AI基础设施领域,分布式架构能有效突破单数据中心算力瓶颈,支撑万亿参数大模型训练。特别是面对长距离传输时延和带宽稳定性挑战,需要采用RDMA、确定性网络等关键技术。Scale-Across作为分布式系统的高级形态,通过跨地域多数据中心互联,构建逻辑统一的AI算力池,为超大规模AI训练和全球推理服务提供核心支撑。本文聚焦AI集群跨数据中心互联的技术路径,涵盖全栈优化、网络自治等实践方

chouxuyi9789的博客 400

Go语言AI智能体开发实战:基于LangGraphGo构建下一代工作流引擎

在AI应用开发领域,工作流编排是构建复杂智能系统的核心技术。其核心原理是将任务执行过程建模为状态图,通过节点和边的组合定义数据流转路径,实现多步骤推理与工具调用的自动化。这种基于状态图的编程模型,为智能体提供了清晰的“思考-行动-观察”循环抽象,显著提升了复杂业务逻辑的可维护性和可观测性。从技术价值看,它解决了传统代码中状态分散、流程僵化的问题,支持条件分支、并行执行等高级模式,是实现生产级AI应用的关键基础设施。在应用场景上,该技术广泛适用于客服机器人、自动化审批、数据ETL等需要多步骤协调的领域。本文以

weixin_30457551的博客 362

3.1.hole_behind_comprehensive_teaching_complex 综教楼后的那个坑

北京理工大学计算机学院Data Structure & Algorithm Analysis (2022 antumn) 编程题 (第三周9.19-9.25第一题) 3.1.hole_behind_comprehensive_teaching_complex

Anonlmeus的博客 439

【QEMU系统分析之TPM篇(一)】

本文以 QEMU 8.2.2 为例,分析其 TPM-emulator 模块的实现,并为 QEMU 添加 Windows 平台的TPM 模拟器的支持。

David唐辉的博客 1191

5. 综教楼后的那个坑(10分)

北理数据结构与算法设计

ZohnColin的博客 220

手把手教你用ECharts打造炫酷3D饼图(附完整源码)

本文详细介绍了如何使用ECharts创建炫酷的3D饼图,从环境配置到完整源码实现,涵盖参数解析、视觉优化和交互增强技巧。通过实战案例,帮助开发者快速掌握3D数据可视化技术,提升数据展示效果。

weixin_29031057的博客 281

ESP32S3学习——i2c,点亮0.96寸oled

ESP32S3学习——i2c,点亮0.96寸oled

HandBAI的博客 1万+

综教楼后面的深坑

难以理解为什么会超时 正确的算法可能是要更加简洁的算法?不太懂。 #include<cstdio> #include<string.h> #include<queue> #include<iterator> #include<algorithm> #include<vector> #include&lt...

Unclearsky的博客 718

手把手教你用STM32单片机DIY一个简易PLC(附完整电路图与PCB文件)

本文详细介绍了如何利用STM32单片机DIY一个简易PLC控制器,涵盖硬件设计、电路图解析、PCB布局优化及固件框架实现。通过完整的电路图和PCB文件,帮助读者从元器件选型到工业级优化,逐步构建可靠的PLC系统,特别适合工业自动化爱好者和学习者实践。

weixin_42527160的博客 572

2. 综教楼后的那个坑(10分)

描述   在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。其中一种说法是,在很多年以前,这个坑就已经在那里了。这种说法也被大多数人认可,这是因为该坑有一种特别的结构,想要人工建造是有相当困难的。   从横截面图来看,坑底成阶梯状,由从左至右的 1..N 个的平面构成(其中 1 ≤ N ≤ 100,000),如图:    *            * :    *   ...

Jiahua's blog 2826

〖Python WEB 自动化测试实战篇⑤〗- selenium 元素定位详解 - (八大元素定位方式)

测试对象的定位和操作是我们利用 selenium 编写自动化脚本和 webdriver 的核心内容,其中 "操作" 这一部分又是建立在 "selenium" 元素定位的基础之上的。所以对元素对象的定位就显得越发的重要,接下来我们就学习一下常用的元素定位方法有哪些。......

易编橙 · 终身成长社群,相遇已是上上签! 4万+

基金估值核算系统三国杀:恒生 VS 赢时胜 VS 融选!

本文对比分析了恒生电子、赢时胜和融选科技三家金融科技公司的基金估值系统。恒生电子作为行业龙头,在公募基金领域占据较大份额,其新一代估值系统6.0采用微服务架构,自动化程度高;赢时胜在中型公募和券商资管领域优势明显,其V5.5系统在信创适配和复杂产品处理方面表现突出;融选科技作为新兴厂商,提供轻量化解决方案,适合中小型机构。文章从市场格局、系统定位、技术架构、成本构成和用户反馈五个维度进行深入比较,为金融机构选型提供参考。当前估值系统市场呈现"三国鼎立"格局,各具特色,选型需结合机构规模、

magbox520的博客 827

填坑,但是用水

综教楼后那个坑

June_sixth的博客 316

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

工科楼北面的那个坑

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct mdata 5 { 6 int *pTime; 7 int width; 8 int hight; 9 struct mdata *pre; 10 ...

weixin_34387284的博客 179

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

浪客楼

<br />似烟的朦胧<br />月下倒映在楼中<br />纷飞的头发<br />无法团圆的中秋<br />静谧的醉酒<br />恋着原醉带来的孤寂<br />我欺骗自己<br />一个人比较好过<br />被侵蚀的月光<br />和浪人暂宿的楼<br />所有的雨下了以后<br />假使能够这样带走我的愁<br />若否我永远关进浪客楼<br />挑战没你的以后<br />假使能够这样带走我的愁<br />过着我自己所谓的生活。

Henanprovince的专栏 379

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

这是一种痛!

看到小悦悦死亡的消息,我热泪盈眶。这是一种痛,一种痛彻心扉的痛!再没有比这看着一个活生生的的生命逝去更加难受的感觉,把孩子撞倒再次碾压过去,这位司机你还是不是人,你这就是赤裸裸的谋杀!路人们打个电话又这么困难吗!你们知道吗?全球都报了都臭全球了! 我为什么要出国,我在大学学的是建筑出来就成了国家监理,工地就我敢开停工令就算施工单位恨的牙痒痒也不敢对我怎样,因为我不需要他们给出来的利益。后来我意识

ALL BLACK 802

北京理工大学—计算机专业课程资源

北京理工大学—计算机专业课程资源

一只野指针.的博客 4444

酒店采购员教你如何斗智经验

中小酒店采购中的一个重要环节就是与农贸市场的小商小贩打交道,怎么“火眼金睛”识破他们的“把戏”,不再把又鲜又亮的海鲜原料买回去一做却粘乎乎的、把既丰满又美观的虾买回去却是隔夜的、怎么在与他们打交道中不再吃亏?这不仅需要眼光,更需要经验。从事采购工作15年、来自大连的餐饮经理人杨铁锋给大家总结了20条“战斗经验”,与广大的采购经理人共享。  1、农贸市场的小贩们是非常现实的商人,见识广:每天市场里发...

weixin_30575309的博客 167
上一篇: (BIT小学期)(25-30)
下一篇: 孤独的运货员
Cosmo9
博客等级 码龄4年 61粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值