L2-014 列车调度 (25 分)详解

L2-014 列车调度 (25 分)详解火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?输入格式:输入第一行给出一个整数N…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

火车站的列车调度铁轨的结构如下图所示。
在这里插入图片描述
两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?

输入格式:
输入第一行给出一个整数N (2 ≤ N ≤10
​5
​​ ),下一行给出从1到N的整数序号的一个重排列。数字间以空格分隔。

输出格式:
在一行中输出可以将输入的列车按序号递减的顺序调离所需要的最少的铁轨条数。

输入样例:

9
8 4 2 5 3 9 1 6 7

输出样例:

4

该题乍看之下不知道是让干什么的,后来我看了别人的博客后才搞懂了这道题的做法。
该题要想让列车按降序输出,那么必须让同一条轨道上的车编号大的先进入,编号小的后进入,而如果一条轨道上编号最小的车的编号如果比要处理的车的编号还要小的话,那么这个该处理的车就必须新开一条轨道去让该车进入,而题目的要求就是要求出需要多少种这样的轨道。从以上分析中,可以得到以下信息:

if(当前编号>所有轨道上的最小编号)
{
	新增轨道并将该编号放入该轨道。
}
else
{
	把该编号放入最接近它的比他稍大一点的轨道中。
	(有同学可能会问为什么要放到最接近他的轨道,这是因为如果有这种情况出现
	{
		输入数据:8 4 2 5 3 9 1 6 
		在编号1进入之前按照伪代码每条轨道是这样过的情况:
		2 4 8
		3 5
		9
		如果将1放到最接近他的第一条轨道中,那么之后的6可以在不增加轨道的情况下放入第三条 
		轨  道,但如果要把1放入第三条轨道,那么就需要再增加一条轨道去放6,显然这样并不是
		最优解。
	})
}

由于该题只需输出轨道数,所以每个轨道上并不需要记录所有的编号,只需要记录最小的编号即可,所以可以用,通过set进行插入删除等操作,至于如何找寻距离编号最近的轨道,可以直接利用lower_bound()函数,极为方便,而且通过set进行的查找时间复杂度低,不易超时,虽然有同学可能会用数组进行二分查找,但显然不如set方便。
下面给出代码

#include<iostream>
#include<set>
using namespace std;
int main()
{
	int n;
	cin>>n;
	set<int>sc;
	for(int i=0;i<n;i++)
	{
		int k;
		scanf("%d",&k);
		set<int>::iterator it=sc.lower_bound(k);
		if(it!=sc.end())
		{
			sc.erase(it);
			sc.insert(k);
		}
		else
		sc.insert(k);
	}
	cout<<sc.size();
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159399.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux如何删除tree命令,误删tree命令如何恢复

    linux如何删除tree命令,误删tree命令如何恢复误删tree命令如何恢复考察rpm,yum的用法一、删除tree命令,tree命令不可用[root@centos7~]#whichtree/usr/bin/tree[root@centos7~]#rm-f/usr/bin/tree[root@centos7~]#tree.bash:tree:commandnotfound…二、直接yum或rpm安装将提示tree已经…

    2022年7月24日
    11
  • jmeter正则提取器的使用_java正则表达式用法

    jmeter正则提取器的使用_java正则表达式用法一、正则表达式提取器各名词解(1)ApplytoMainsampleandsub-samples(作用于主节点的取样器及对应子节点的取样器)Mainsampleonly(仅作用于主节点的取样器)Sub-samplesonly(仅作用于子节点的取样器)Jmeter-VariableNametouse(作用于jmeter变量(输入框内可输入jmeter的变量名称),从指定变量值中提取需要的值)(2)要检查的响应字段1、主体:响应报文的主体,最常用2、Body(une.

    2022年9月10日
    0
  • 动感地带亲情省

    动感地带亲情省注:本文转自网络为进一步满足客户国内长途及国内漫游通话需求,中国移动北京公司将于近期推出长漫亲情省业务,现就相关事宜通知如下:  一、推出时间  2009年4月18日0时  二、目标客户动感地带、

    2022年7月3日
    29
  • 易企秀的制作方法和步骤_易企秀制作流程

    易企秀的制作方法和步骤_易企秀制作流程虽然易企秀邀请函日渐被广大网友所知,也有很多网友在自己制作易企秀,但仍有很多想要制作易企秀,却自己不会制作的朋友,不得不花大价钱请他人制作,所以我们特地为您准备了一个如何快速学会制作易企秀的教程。打开

    2022年8月4日
    3
  • a++ 和 ++a 的区别

    a++ 和 ++a 的区别

    2021年9月30日
    42
  • 二进制减法图解_二进制加法的算法图解

    二进制减法图解_二进制加法的算法图解二进制减法类似于十进制的减法,我们从十进制的减法来推出二进制减法如何进行运算。十进制减法例如74323-47562=26761的运算。灰色部分为计算过程,绿色字为被减一得到的数,红色字为借一后得到的数。在运算过程中,从右往左逐位进行计算。3-2=1;2不够减6,向前借一后加10变成12;12-6=6;3在上一步被借一所以减为2,2不够减5,…

    2022年9月25日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号