c语言列车调度,列车调度

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

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

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

火车站的列车调度铁轨的结构如下图所示:

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

输入格式

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

输出格式

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

输入样例

9

8 4 2 5 3 9 1 6 7

输出样例

4

此题考查的是贪心+二分,核心在于序号小的跟在序号最接近自己且比自己大的列车后面,下面分析来源于参考链接1:

下面是4条用来调度的轨道:

1248                            1248

35       —————->     35

9                                  7

6                                  6

当前轨道数len=0

首先8进接着4可以跟在8后面,然后是2。

len=1

现在第一条轨道最后的是2,5肯定不能排在2后面,因为5要比2先出去。所以5进入第二条轨道。现在的状态:(只记录排在轨道最后面的列车)

2

5

len=2

轮到3,3可以排在5后面。

2

3

9比3和2都大,只能进入新的轨道

2

3

9

len=3

1比2,3都小,贪心选择,选最接近的2。于是1进入当前第一条轨道

1

3

9

len=3

6比2,3大

1

3

6

7比1,3,6都大

1

3

6

7

len=4

接着按顺序出去就OK了

代码如下:

#include

using namespace std;

int main(){

int n;

int num[100001];

int len=0;

int k;

cin >> n;

while(n–) {

cin >> k;

if(len==0||num[len-1]

num[len++]=k;

}

else{ //若存在轨道最后一个数大于当前数,利用二分法去最优轨道(轨道最后一个数与当前数的差值最小)

int l=0;

int r=len-1;

int mid;

sort(num,num+len); //保证每个轨道的最后一个数按照从小到大排列

while(l

mid=(l+r)/2;

if(num[mid]>k) r=mid-1;

else l=mid+1;

}

num[l]=k;

}

}

cout << len << endl;

return 0;

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年7月26日 下午1:36
下一篇 2022年7月26日 下午1:46


相关推荐

  • CAS单点登录(三)–服务端改造(登录页及登录方式的自定义)

    CAS单点登录(三)–服务端改造(登录页及登录方式的自定义)上一篇文章(http://blog.csdn.net/u012116457/article/details/52161201)提到,为了更好的满足我们的要求,还需要对服务端进行改造。最近发现了一个巨牛的人工智能教程,不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!所以分享给大家,感兴趣的童鞋可以看看。点这里可以跳转到教程。1.新建cas_server为了方便,首先我们现在…

    2022年6月5日
    98
  • aardio部署_aardio有什么用

    aardio部署_aardio有什么用aardio 编程都需要用到什么语言 android 编程都需要用到的是 android 开发语言 是一门独立的开发语言 用什么命令在 aardio 中隐藏外部程序的窗口 icon extjs examples shared icons fam cog edit png UseaURLinthe Edit handler function grid rowInde

    2026年3月17日
    2
  • 2246xt u盘开卡详细教程_电脑重装系统:常规U盘PE装机详细教程~[通俗易懂]

    2246xt u盘开卡详细教程_电脑重装系统:常规U盘PE装机详细教程~[通俗易懂]系统重装:常规U盘PE装机详细教程!一适用条件此方法适用任何情况下的电脑系统新装、重装!8G大小的U盘X1微PE工具箱软件X1微软原版系统镜像文件X1PE系统我这里推荐使用微PE工具箱(优启动、老毛桃、大白菜都可以使用哪个看你自己心情)。在微PE官网下载工具箱安装包,推荐直接下载V2.0版本,支持NVME盘。如果你的…

    2022年6月12日
    31
  • java calendar 设置小时_Java Calendar.set 方法设置时间的问题

    java calendar 设置小时_Java Calendar.set 方法设置时间的问题因项目需要,需要遍历一年中的其中几个月,获得每个月的用户数量。变量有:开始时间–startDate,结束时间–endDate。逻辑很简单:获取到开始时间的月份和结束时间的月份,然后得到月份差值,进行for循环遍历,遍历的时候判断用户注册的时间是否在这个月里,然后得出结果。关键就在于:判断用户注册的时间是否在这个月里。想了一个办法:假如一个用户的注册时间是2016-09-0522:05…

    2022年5月26日
    33
  • Java 面试之算法[通俗易懂]

    Java 面试之算法[通俗易懂]二分查找intBinarySearch(DataTypea[],intlow,inthigh,DataTypex){if(low&amp;amp;amp;amp;gt;high){return-1;//查找失败}mid=(low+high)/2;//折半if(a[mid]==x){r…

    2022年7月18日
    24
  • Java中的增强型for循环「建议收藏」

    Java中的增强型for循环「建议收藏」增强型for循环定义如下:for(ElementTypeelement:arrayName){};上述for循环可被读为:foreachelementinarrayNamedo{…}——————————————————————————————-…

    2022年6月16日
    39

发表回复

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

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