当前位置: 首页 > news >正文

扫描线求矩形周长并的注意事项

在做扫描线时,对矩形的横边按照\(h\)值排序,从下往上扫描。
答案统计如代码所示

Code

点击查看代码
for (int i = 1; i <= cnt; ++i) {update(1, lbd, rbd - 1, line[i].l, line[i].r - 1, line[i].val);ans += T[1].num * 2 * (line[i + 1].h - line[i].h);ans += abs(T[1].len - lst);lst = T[1].len;
}

但不同于面积并,在求周长并时要依赖上一次根节点的\(len\)值,因此对于\(h\)相同的横边有优先级限制。
举个例子,如下图

屏幕截图 2025-07-29 141027
两个矩形的入边与出边的h相同且有重合,此时如果先处理\(val\)为-1的出边,再处理\(val\)为1的入边,结合上面的代码会发现中间重合的部分算了两次!
因此正确的处理顺序应该是先处理入边再处理出边 这样就能避免这样的错误啦
可以在排序的时候判断一下\(h\)是否相同,若不相同则按照\(val\)值排序,1的优先级大于-1

Code

点击查看代码
struct ScanLine {int l, r, h, val;ScanLine() {}ScanLine(int a, int b, int c, int d) : l(a), r(b), h(c), val(d) {}inline bool operator < (const ScanLine &rhs) const {return h < rhs.h || h == rhs.h && val > rhs.val;}
} line[M];
http://www.sczhlp.com/news/992.html

相关文章:

  • 微店商品详情接口micro.item_get请求参数响应参数解析
  • 游戏服务器优雅关服设计与实现
  • 思通数科 AI 安监系统:工业园安全监管的 “智能防线”
  • snort入侵检测基础
  • Linux防火墙
  • SAP 后继物料简介
  • SQL注入漏洞
  • 使用mysqlshell查询数据库返回json格式数据
  • Centos中将UTC的时区改为CTS时区
  • MyEMS 开源能源管理系统核心代码解读 023
  • 详解 OpenAI 函数调用(Function Calling):让模型具备数据获取与行动能力
  • 【宝藏贴】HarmonyOS官方模板优秀案例 第1期:便捷生活-购物中心
  • 新一代对象存储 RustFS Python SDK 的使用
  • 扩散模型-PPDM-plus-03 - jack
  • c++ 进制转换
  • 【LeetCode 2】力扣算法:两数相加
  • 测试支持 PolarDB-X(高度兼容 MySQL) 的客户端图形工具
  • Gitlab Runner怎么使用缓存cache加快构建速度
  • 一个38岁程序员的五年之约:软考、重构与独立开发者之路
  • 1.初看代码
  • Tita 新绩效一体化产品:重塑企业绩效管理新范式
  • 完整教程:【Unity笔记03】#if的用法和命名空间
  • 莫比乌斯反演+杜教筛+Plya学习笔记
  • 可持久化并查集
  • SAP 工序委外简介
  • GitHub汉化教程
  • Django中遇到choice定义的模型类中的字段,通过输入数字展示输出对应中文的需求
  • 提示工程:大语言模型的新特征工程
  • MyEMS开源能源管理系统核心代码解读022
  • 强化集成、可靠性与信任:Stack Overflow for Teams 新功能解析