列车调度C语言数据结构,数据结构——列车调度

列车调度C语言数据结构,数据结构——列车调度题目链接:https://pintia.cn/problem-sets/1045870129681440768/problems/1045870197130047495#p-2题目大意:给你一列火车,上面有表号,问给你几个火车隧道,能使车厢从大到小。一道有思维结构的模拟题。先说一下核心解体思想:就是一个序列里,有多少个从大到小排好序的序列,求个数。朴素的模拟思想,先读入一个数组,从头到尾判断,含有…

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

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

题目链接:https://pintia.cn/problem-sets/1045870129681440768/problems/1045870197130047495#p-2

题目大意:给你一列火车,上面有表号,问给你几个火车隧道,能使车厢从大到小。

一道有思维结构的模拟题。

先说一下核心解体思想:就是一个序列里,有多少个从大到小排好序的序列,求个数。

朴素的模拟思想,先读入一个数组,从头到尾判断,含有多少个,从大到小的序列,用used数组标记使用,但是这种做法会超时。

这里先给出错误代码:

#include

using namespace std;

const int INF=1e6+10;

const int maxn=100000+10;

int a[maxn];

int main()

{

int n; scanf(“%d”,&n);

for(int i=0;i

int num=n,exnum=0;

while(num>0)

{

bool flag=true;

int t;

for(int i=0;i

{

if(a[i]!=INF)

{

if(flag)

{

num–;

exnum++;

t=a[i];

a[i]=INF;

flag=false;

}

else if(a[i]

{

t=a[i];

a[i]=INF;

num–;

}

}

}

}

printf(“%d\n”,exnum);

return 0;

}

超时之后开始简化自己的思想,再网上看到了二分思想A题,但总感觉还有更为简单的方法。

想来想去最后使用的,使用数组储存最一个隧道末尾数字的大小+二分;

下面给出AC代码,代码下面有一些具体解释:

#include

using namespace std;

const int INF=1e6+10;

const int maxn=100000+10;

int a[maxn];

int main()

{

int n; scanf(“%d”,&n);

int len=1;

for(int i=0;i

{

int t; scanf(“%d”,&t);

if(i==0) a[0]=t;

else

{

if(t>a[len-1])

{

a[len++]=t;

}

else

{

int pos=lower_bound(a,a+len,t)-a;

//cout<

a[pos]=t;

}

//sort(a,a+len);

}

}

printf(“%d\n”,len);

return 0;

}

可能会有疑问,lower_bound二分函数,只有在数组排好序的时候才能使用,但是代码中的排序函数是被注释掉的,而且去掉注释会超时,但是仔细想想就会知道,我们用来每次更新火车隧道末尾数字的时候,总是选择的跟他的值差距最小的(因为lower_bound函数总是找到的是第一个值),这个过程中可以保证数组是从小到大排好的,从而省略掉了排序的函数。

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

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

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


相关推荐

  • Centos部署禅道项目管理软件

    Centos部署禅道项目管理软件

    2021年6月2日
    126
  • L1正则化的理解(l1和l2正则化代表什么意思)

    在论文中看到L1正则化,可以实现降维,加大稀疏程度,菜鸟不太懂来直观理解学习一下。在工程优化中也学习过惩罚函数这部分的内容,具体给忘记了。而正则化正是在损失函数后面加一个额外的惩罚项,一般就是L1正则化和L2正则化。之所以叫惩罚项就是为了对损失函数(也就是工程优化里面的目标函数)的某个或些参数进行限制,从而减少计算量。L1正则化的损失函数是是不光滑的,L2正则化的损失函数…

    2022年4月16日
    61
  • 求逆矩阵的方法「建议收藏」

    求逆矩阵的方法「建议收藏」一般求逆矩阵的方法有两种,伴随阵法和初等变换法。但是这两种方法都不太适合编程。伴随阵法的计算量大,初等变换法又难以编程实现。适合编程的求逆矩阵的方法如下:

    2022年8月21日
    5
  • shell语法简单介绍

    shell语法简单介绍

    2021年12月10日
    43
  • java高级语言程序设计_高级程序设计语言包括

    java高级语言程序设计_高级程序设计语言包括Java程序设计(高级及专题)- GUI

    2022年4月22日
    38
  • bs和cs架构的区别和优缺点_百年灵b1p1和b1x1区别

    bs和cs架构的区别和优缺点_百年灵b1p1和b1x1区别BS和CS架构的区别BS就是浏览器服务器架构(网站)CS就是需要安装的那些应用程序app二者比较:标准:BS开发更标准一些,因为CS需要在不同的系统上执行,BS只需要在浏览器上执行效率:CS效率更高,CS属于安装的软件,很多内容已经安装在电脑中了,只需要联网获取数据即可,而BS运行在浏览器上,所有的数据必须经过下载才能使用;升级:BS无缝升级,CS需要删除老版本,再安装新版本安全性:CS更为安全,因为必须安装软件才能使用;BS安全度较低,只要有浏览器就可以使用开发成本:CS开发成本更高

    2022年10月17日
    2

发表回复

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

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