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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eclipse中文档注释快捷键_eclipse文档注释

    eclipse中文档注释快捷键_eclipse文档注释Eclipse中的两种注释方法:(1)多行注释(2)单行注释一、多行注释快捷键1:添加注释Ctrl+Shift+/:  添加/**/注释 示例:选中代码块后按下快捷键即可/*floatsize=0.0f;  floatpct=0.0f;  try{size=Float.parseFloat(resInf

    2022年8月15日
    7
  • 嵌入式linux实时操作系统及应用编程pdf(嵌入式linux都有哪些调试信息)

    目录目录前言GDB调试工具介绍GDB调试教程gcc调试相关编译选项GDB交叉调试环境搭建下载地址编译过程总结链接地址前言项目遇到一个问题,就是程序在Ubuntu下运行的时候是正常的,至少大部分时候运行是正常的,但是移到开发板上,就会出现段错误。这时候突然想到了GDB,从来都没有接触过调试工具,以前的调试都是使用printf直接打印的方式!!!

    2022年4月15日
    66
  • 软件,硬件版本号命名规范是什么_版本号格式

    软件,硬件版本号命名规范是什么_版本号格式软件、硬件版本号命名规范常见版本号规范示例如v1.0.0通用版本命名规范如下:主版本号.子版本号.修订版本号.日期_版本阶段如v1.2.3.20201228_rc主版本号(1)功能模块发生较大变动,如增加多个模块/整体架构改变子版本号(2)功能增加或变化修订版本号(3)Bug修复或小变动,间隔不限,修复一个严重bug即可发布一个修订版由项目经理决定日期版本号(20201228)记录修改项目的当前日期,每天对项目修改都更改由开发人员决定希腊字母版本号(rc)标注当前版本的软

    2025年10月20日
    2
  • 推荐 5 款好用的REST API工具

    作者 | Marta Krzyk 首发|架构头条 译者 | 王强  策划 | 小智 市面上可用的 REST API 工具选项有很多,我们来看看其中一些开发人员最喜欢的工具…

    2021年6月22日
    120
  • 使用javascript实现对于chineseocr的API调用「建议收藏」

    ChineseOCR在线API网页地址界面提供多种接口调用方式,比如在线调用、Javascriptapi调用、curlapi调用和pythonapi调用四种方式,本次使用javascriptapi调用的方式进行OCR识别在线Javascript工具在线工具网页链接在线Base64转化工具在线工具网页链接代码修改新增一个变量fill_with_base64_image接收图片的base64编码的字符串 将input内的<fill_with_base6.

    2022年4月6日
    37
  • latex中长公式换行,很好的办法

    latex中长公式换行,很好的办法今天在编辑公式时,有一个公式很长,写到一行就出去了。当时之前换行都是方程组或者在括号完之后换,都没有问题。但是今天我也换行的是在括号中间断开。这样出现问题,编辑的时候会出错误提醒。上网查了一些论坛,也有人和我一样的问题,但是都没有解决方案。自己试了好几种方法,又和办公室的其他人讨论了一下,终于找办法了。比较简单的情况:方程组code:\begin{equation}\b

    2022年5月31日
    57

发表回复

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

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