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


相关推荐

  • pycharm 格式化json_u盘文件被隐藏怎么恢复

    pycharm 格式化json_u盘文件被隐藏怎么恢复CTRL+ALT+L

    2022年8月27日
    0
  • 命令行中使用adb安装apk「建议收藏」

    命令行中使用adb安装apk「建议收藏」在你的android—IDE中找到D:\Softwave_Ghost\技术软件\IDE\adt_android_eclipse\adt-bundle-windows-x86-20130219\sdk\platform-tools目录下有adb.exe  cd到这个目录下然后可以进行adb操作 或者设置环境变量 我的电脑->属性->高级系统设置->环境变量->path编辑将上面那个目录复

    2022年5月10日
    29
  • SpringBoot集成拦截器[通俗易懂]

    SpringBoot集成拦截器[通俗易懂]集成拦截器登录验证为例添加拦截器public class LoginInterceptor implements HandlerInterceptor { private Logger log = LoggerFactory.getLogger(getClass()); //Controller逻辑执行之前 @Override public boolean preHandle(HttpServletRequest request, HttpServletRe

    2022年8月9日
    3
  • HTML5新控件 – 日期和时间选择输入

    HTML5新控件 – 日期和时间选择输入转载自:https://blog.csdn.net/u014063717/article/details/50914466HTML5定义了几个与日期有关的新控件。支持日期控件的浏览器会提供一个方便的下拉式日历,供用户选择。注意:我测试了Chrome和Opera,火狐提供下拉式日历支持,其它浏览器可能仍是一个普通文本框。1,日期控件-date&lt;inputtype="date"valu…

    2022年5月24日
    261
  • Android Service 服务(一)—— Service

    Android Service 服务(一)—— Service

    2021年12月6日
    43
  • Windows批处理(.bat)常用命令教程

    Windows批处理(.bat)常用命令教程批处理的语句不多,但是在某些时候,结合常用的一些cmd命令,可以解决很多重复性的工作。下面是一些对批处理命令的总结,如果需要学习的话,对这些关键字有个印象就可以了,如果忘记怎么用,可以使用关键字/?来获取帮助,帮助内容都是中文,很容易理解,比如:常见问题:(1).bat输出中文乱码:把文本格式改成ANSI(2)双击bat文件,直接闪退:在代码最后一行加上pause,相当于C语言中的getchar(),让页面执行完之后不要关闭。1echo和@回显命令@#关闭单行回显echooff

    2022年8月22日
    5

发表回复

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

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