博客
关于我
POJ 1765 November Rain
阅读量:793 次
发布时间:2023-03-03

本文共 528 字,大约阅读时间需要 1 分钟。

题目大意:

有一些屋顶,相当于一些线段(不相交)。问每一条线段能够接到多少水,相对较低的屋顶能够接到高屋顶留下的水。

解题思路:

扫描线,由于对于同一个x最多有25条线段。所以不须要线段树更新。在扫描线的过程中构造出线段与线段之间的关系。好在最后计算每一个屋顶能够接多少水。

以下是代码:

[代码部分]

经过处理,点的数量为pointcnt。然后对点进行排序并去重。接着对线段进行排序。

初始化last=0, now=0, tail=0, levelcnt=0。

然后开始循环:

对于每个点i,设置now=point[i]。

如果levelcnt不为0,则将segment[a[levelcnt-1]]的w增加now-last。

然后进入一个内部循环:

当tail的x1等于now且tail的x1不为n时,进入处理。

在这一步,通过比较线段的y值,找到与now相连的线段。然后按照层级进行更新。

对于每个线段,根据它的x1和x2是否等于now,来决定下一步的操作。

最后,设置levelcnt为cnt的值。

然后使用队列进行广度优先遍历,计算每个线段的w值。

最终结果保存在ans数组中。

代码部分完成后,对每个线段的num输出ans值。

[优化后的内容]

转载地址:http://muxfk.baihongyu.com/

你可能感兴趣的文章
PL/SQL连接远程服务器数据库,出现ORA-12154: TNS: 无法解析指定的连接标识符。
查看>>
pl/sql锁
查看>>
PL2303 Windows 10 驱动项目常见问题解决方案
查看>>
QueryPerformanceCounter与QueryPerformanceFrequency
查看>>
Plaid.com的监控系统如何实现与9600多家金融机构的集成
查看>>
Plain Stock Prediction:基于RNN的股票价格预测工具
查看>>
platform_driver与file_operations两种方法开发led驱动
查看>>
PlatON共识方案详解:应用CBFT共识协议,提高共识效率
查看>>
QueryDict和模型表知识补充
查看>>
Querybase 使用与安装教程
查看>>
Playwright与Selenium的对比:谁是更适合你的自动化测试工具?
查看>>
quarz设置定时器任务的有效时间段_定时器?你知道有几种实现方式吗?
查看>>
PLC、DCS、SCADA的选型
查看>>
PLC中的电子凸轮的简单介绍
查看>>
PLC发展详解-ChatGPT4o作答+匹尔西
查看>>
PLC探针有什么用
查看>>
PLC接线详解
查看>>
PLC数组的使用(西门子)
查看>>
Quarzt定时调度任务
查看>>
SpringBoot之AOP详解
查看>>