当前位置:网站首页>2022牛客多校训练第二场 H题 Take the Elevator
2022牛客多校训练第二场 H题 Take the Elevator
2022-08-05 00:18:00 【Rain Sure】
题目链接
题目大意
大概意思就是,给了我们一部损坏的电梯,以及一些需要乘坐电梯的乘客的信息以及电梯的最大容量m。问我们电梯把所有乘客都运送到指令楼层所需要的最小时间。
题解
很明显的贪心题,但是不太好想,在这里给一个思路。
我们分别考虑上升的乘客和下降的乘客,因为电梯如果开始下降了,那么它就不能再上升了;所以我们让电梯每一躺尽可能走的高,那么每一趟所花费的时间就是上升的下降取一个最大的;
主要实现方法:
假设当前移动区间为 [ l , r ] [l, r] [l,r],假设 l < r l < r l<r,那么当前即为上升方向,我们在 l l l处-1,在 r r r处+1,也就是进电梯-1,出电梯+1; 然后考虑最高的点,当前最高的点即是电梯要到达的最高位置;
同理再考虑下降方向:假设当前区间为 [ l , r ] [l, r] [l,r], l > r l > r l>r, l l l处-1, r r r处+1.然后对所有点进行排序,先考虑最高的位置,大概思路就是这样,细节看代码吧。
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define int long long
typedef struct node
{
int pos, type;
bool operator < (const struct node &w) const {
if(pos != w.pos) return pos > w.pos;
return type < w.type;
}
}Node;
vector<Node> up, down; // 分别存储上升和下降的乘客
int n, m, k;
signed main()
{
cin >> n >> m >> k;
for(int i = 0; i < n; i ++){
int a, b; cin >> a >> b;
if(a < b) {
up.push_back({
a, -1});
up.push_back({
b, 1});
}else{
down.push_back({
a, 1});
down.push_back({
b, -1});
}
}
vector<int> t1, t2; // 分别存储每一趟上升和下降的最大高度
sort(up.begin(), up.end());
sort(down.begin(), down.end());
int temp = 0;
for(auto item : up) {
temp += item.type;
if(temp > t1.size() * m) t1.push_back(item.pos);
}
temp = 0;
for(auto item : down) {
temp += item.type;
if(temp > t2.size() * m) t2.push_back(item.pos);
}
int res = 0;
for(int i = 0; i < t1.size() || i < t2.size(); i ++){
temp = 0;
if(i < t1.size()) temp = max(temp, t1[i]);
if(i < t2.size()) temp = max(temp, t2[i]);
res += (temp - 1) * 2;
}
cout << res << endl;
}
边栏推荐
- How to automatically push my new articles to my fans (very simple, can't learn to hit me)
- Senior game modelers tell newbies, what are the necessary software for game scene modelers?
- 软件测试面试题:测试用例通常包括那些内容?
- 倒计时1天!8月2日—4日与你聊聊开源与就业那些事!
- Brainstorm: Complete Backpack
- TinyMCE disable escape
- KT6368A Bluetooth certification problem_FCC and BQB_CE_KC certification or other instructions
- 机器学习(公式推导与代码实现)--sklearn机器学习库
- 软件测试面试题:手工测试与自动测试有哪些区别?
- 测试经理要不要做测试执行?
猜你喜欢

简单的顺序结构程序(C语言)

Senior game modelers tell newbies, what are the necessary software for game scene modelers?

2 用D435i运行VINS-fusion

看图识字,DELL SC4020 / SCv2000 控制器更换过程

matlab中rcosdesign函数升余弦滚降成型滤波器

leetcode: 266. All Palindromic Permutations

3. Actual combat---crawl the result page corresponding to Baidu's specified entry (a simple page collector)

golang 协程的实现原理

Metasploit-域名上线隐藏IP

怎样进行在不改变主线程执行的时候,进行日志的记录
随机推荐
2022牛客暑期多校训练营5(BCDFGHK)
[idea] idea configures sql formatting
关于使用read table 语句
僵尸进程和孤儿进程
软件测试面试题:测试用例通常包括那些内容?
克服项目管理中恐惧心理
Mysql_12 多表查询
oracle创建用户以后的权限问题
Flask框架 根据源码分析可扩展点
Cython
[Cloud Native--Kubernetes] Pod Controller
国内网站用香港服务器会被封吗?
【LeetCode】矩阵模拟相关题目汇总
电子行业MES管理系统的主要功能与用途
tensor.nozero(), mask, [mask]
leetcode:266. 回文全排列
软件测试面试题:黑盒测试、白盒测试以及单元测试、集成测试、系统测试、验收测试的区别与联系?
软件测试面试题:什么是软件测试?软件测试的目的与原则?
Raw and scan of gorm
Implementation principle of golang coroutine