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

算法题(164):贴海报

审题:

本题需要我们找到贴完海报后可以直接看到的所有海报的个数

思路:
方法一:暴力模拟

我们可以直接模拟贴海报的过程,创建一个墙数组,每次贴海报就把对应位置的数组值改为海报编号,最后统计出的整个数组中海报的编号个数就是能看到的海报张数,直接输出即可

时间复杂度:我们需要进行m次贴海报,海报的数据范围是1e7,m的数据范围是1e3,乘起来会超时

方法二:离散化+模拟

由于本题的海报数据范围较大,但是海报张数的数据范围却较小,满足离散化使用前提。

所以我们使用离散化的算法将原海报区间映射到更小的区间上进行模拟

第一步:离散化海报区间

第二步:模拟贴海报过程

第三步:统计海报编号数

注意:如果我们在录入数据到离散化数组的时候没有给海报区间手动插入数据,可能会导致后面离散化区间后的海报编号情况与实际不同。

图示:

我们看到图示情况下,直接将数据录入disc数组可能会出现离散后统计结果与实际不同的情况,这是因为离散化后让区间缩短,如果不手动插入区间会导致离散区间异常重合

解题:
 

#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int N = 1010;
int n, m;
int a[N], b[N];
int disc[4 * N];
unordered_map<int, int> mp;//原始数据值,离散值
int pos;//离散后数据个数(无去重版本)
int f[4 * N];//模拟数组
bool judge[4 * N];//记录某海报是否已经被记录
int main()
{//数据录入cin >> n >> m;for (int i = 1; i <= m; i++){cin >> a[i] >> b[i];disc[++pos] = a[i]; disc[++pos] = a[i] + 1;disc[++pos] = b[i]; disc[++pos] = b[i] + 1;}//离散化处理sort(disc + 1, disc + 1 + pos);int cnt = 0;//去重后的离散数据个数for (int i = 1; i <= pos; i++){int x = disc[i];if (mp.count(x)) continue;cnt++;mp[x] = cnt;}//离散化后模拟贴海报for (int i = 1; i <= m; i++){int l = mp[a[i]];int r = mp[b[i]];for (int j = l; j <= r; j++){f[j] = i;}}//统计结果int answer = 0;for (int i = 1; i <= cnt; i++){int num = f[i];if (!num || judge[num]) continue;answer++;judge[num] = true;}cout << answer << endl;return 0;
}

1.由于我们手动插入了区间之间的空格,导致数据多了一倍,所以disc等数组就需要开4倍的N

2.统计结果的时候遇到为0编号的海报表示没有海报张贴,continue。

遇到已经看见过的海报也是continue,所以我们设置了judge数组

P3740 [HAOI2014] 贴海报 - 洛谷

http://www.xdnf.cn/news/12814.html

相关文章:

  • 电力系统时间同步系统之三
  • 在 Java 中!(逻辑非)和 ||(逻辑或)的优先级关系
  • 生成模型从自回归到变分自动编码器
  • 【PhysUnits】15.18 Unit基础结构 (unit.rs)
  • 无需登录即可使用的Web应用网站
  • CMS、G1、ZGC、Shenandoah 的全面对比
  • 淘晶驰的串口显示屏T0 T1 K0 X2 X3 X5之间有何区别 各自的优势是啥 划分的依据是啥
  • 获取环境变量的两种方式:getenv()和environ
  • Nginx Stream 层精准定位ngx_stream_geoip_module
  • 指针的定义与使用
  • Mybatis-Plus的LambdaWrapper
  • 嵌入式面试高频(5)!!!C++语言(嵌入式八股文,嵌入式面经)
  • 将数据库表导出为C#实体对象
  • EMC测试
  • 6月7日day47打卡
  • [ACTF2020 新生赛]Include 1(php://filter伪协议)
  • 嵌入:AI 的翻译器
  • golang常用库之-go-i18n库(国际化)
  • 26、跳表
  • SEO长尾词优化实战策略
  • 【大模型原理与技术-毛玉仁】第五章 模型编辑
  • leetcode刷题日记——二叉搜索树中第 K 小的元素
  • MIT 6.S081 Lab 11 networking
  • RD-Agent-Quant:一个以数据为中心的因素与模型联合优化的多智能体框架
  • CANoe trace里面显示的Time 具体是什么意思
  • Python抽象基类实战:构建广告轮播框架ADAM的核心逻辑
  • Python绘制三十六计
  • OGG 23ai for DAA 部署与补丁升级
  • 雪花ID问题诊断与解决方案
  • C++调试(肆):WinDBG分析Dump文件汇总