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

算法题(162):火烧赤壁

审题:

本题需要我们找到着火区域的总长度

思路:
方法一:离散化+差分

首先我们分析题意:

一段区间是左闭右开的,所以着火区域是用右端点减去左端点。为了防止区间重叠导致的重复计算,我们需要使用差分的思想来解决问题,差分数组中每当有着火区域就让他索引位置+1,让末端位置-1。还原差分后最终的值不为0就是着火区域。

其次我们观察本题的数据范围,数据量并不大,但是数据范围很大,无法用值直接充当索引,这样会导致数组空间不够,所以我们先要对数据做离散化处理,以便后续可以根据离散值当索引将数据存进数组中

总体流程:

1.离散化处理数据

2.根据离散化的值建立差分数组

3.还原差分数组,确定真实着火区间

4.累加着火区间
解题:

 

#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int N = 2e4 + 10;
int n;
int pos;//离散化后的数据个数
int a[N], b[N];//存储左右端点
int disc[2 * N];//离散化数据数组
unordered_map<int, int> m;//原始数据,离散值
int f[2 * N];//差分数组
int main()
{cin >> n;//离散化处理for (int i = 1; i <= n; i++){cin >> a[i] >> b[i];disc[++pos] = a[i];disc[++pos] = b[i];}sort(disc + 1, disc + 1 + pos);//排序pos = unique(disc + 1, disc + 1 + pos) - (disc + 1);//去重for (int i = 1; i <= pos; i++){int x = disc[i];m[x] = i;}//差分数据for (int i = 1; i <= n; i++){int l = a[i];int r = b[i];f[m[l]]++; f[m[r]]--;}//还原差分数组for (int i = 1; i <= pos; i++){f[i] += f[i - 1];}//统计结果int answer = 0;for (int i = 1; i <= pos; i++){int j = i;while (j < pos && f[j] > 0) j++;answer = answer + disc[j] - disc[i];i = j;}cout << answer << endl;return 0;
}

注意:
1.由于我们后面需要用到去重之后的离散化数组,所以在升序排序之后我们仍然需要对disc去重。

2.哈希表是根据实际值查找离散值,disc数组是用离散值查找实际值。

哈希表用在差分数组部分,因为要对对应离散值位置进行着火判断。

disc用于映射找回实际着火区间,累加到answer中

P1496 火烧赤壁 - 洛谷

http://www.lqws.cn/news/160723.html

相关文章:

  • 13.4 AI颠覆语言学习:预录制视频+GPT-4评估如何实现60%成本降低与40%留存飙升
  • Seata 分布式事务 AT 模式
  • 智慧供水运维管理系统
  • LeetCode 70 爬楼梯(Java)
  • 探索未知惊喜,盲盒抽卡机小程序系统开发新启航
  • 半监督学习:低密度分离假设 (Low-Density Separation Assumption)
  • mysql密码正确SpringBoot和Datagrip却连接不上
  • c++第七天--特殊运算符的重载练习
  • day20 leetcode-hot100-38(二叉树3)
  • 第二章支线八 ·CSS终式:Tailwind与原子风暴
  • 优雅的系统重试
  • 如何轻松将视频从安卓设备传输到电脑?
  • 检测到 #include 错误。请更新 includePath。已为此翻译单元(D:\软件\vscode\test.c)禁用波形曲线
  • 【SSM】SpringMVC学习笔记8:拦截器
  • qt ui 转python
  • YAML在自动化测试中的三大核心作用
  • C++11 尾随返回类型:从入门到精通
  • Linux服务器如何安装wps?
  • 【案例】电商系统的AI微服务架构设计
  • C语言输入函数
  • 使用Python提取照片元数据:方法与实战指南
  • 炫云:为驱动数字视觉产业升级保驾护航
  • 解锁Java线程池:性能优化的关键
  • 八皇后问题深度解析
  • 11 - ArcGIS For JavaScript -- 高程分析
  • 图像分类进阶:从基础到专业 (superior哥AI系列第10期)
  • 窗口聚合窗口聚合
  • 倍福 PLC程序解读
  • NLP驱动网页数据分类与抽取实战
  • Linux(12)——基础IO(下)