列车调度问题PTA

2023-11-09

7-20 列车调度 (25 分)
火车站的列车调度铁轨的结构如下图所示。

两端分别是一条入口(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

下面先展示 我的4个超时代码
1.

#include<cstdio>
#include<vector>
using namespace std;
int t;

int main(){
	int n,num=0;
	scanf("%d",&n);
	int i,j,t;
	vector<vector<int > > m(n+1);
	for(i=0;i<n;i++)
	{
		scanf("%d",&t);
		for(j=0;j<num;j++){
			if(m[j][m[j].size() -1] >t) {
				m[j].push_back(t); 
				break;
			}
		}
		if(j==num){
			m[num].push_back(t);
			num++; 
		}
	}
	printf("%d",num);
	return 0;
	
}

2.思想大概和上面的VECTOR是一样的,感觉直接普通的数组还更方便
依旧超时

#include<cstdio>
using namespace std;
int a[100000+10];

int main(){
	int n,num=0;
	scanf("%d",&n);
	int i,j,t;
	for(i=0;i<n;i++)
	{
		scanf("%d",&t);
		for(j=0;j<num;j++){
		if(a[j]>t) {
			a[j]=t;
			break;
		}
		}
		if(j==num){
			a[num]=t;
			num++;
		} 
		
	}
	printf("%d",num);
	return 0;
	
}

3.然后想到如果这个新进来的T比数组里所有的数都大,就没必要进入循环了;
进行了一点点改变》》》》依旧超时

#include<cstdio>
#include<algorithm>
using namespace std;
int a[100000+10];

int main(){
	int n,num=0;
	scanf("%d",&n);
	int i,j,t,max=0;
	for(i=0;i<n;i++)
	{
		scanf("%d",&t);
		if(max< t){
			a[num]=t;
			num++;
		}
		else for(j=0;j<num;j++){
		     if(a[j]>t) {
			 a[j]=t;
			
			 break;
		}
		}
		
		sort(a,a+num);
		max=a[num-1];
	}
	printf("%d",num);
	return 0;
	
}

4.嗯嗯,接着想到循环的存在就是为了找能够存放T的位置,这个位置的原有数要比T大所有就想到了upper—bound ,结果还是TLE ?

#include<cstdio>
#include<algorithm>
using namespace std;
int a[100000+10];

int main(){
	int n,num=0;
	scanf("%d",&n);
	int i,j,t,max=0;
	for(i=0;i<n;i++)
	{
		scanf("%d",&t);
		if(max< t){
			a[num]=t;
			num++;
		}
		else {
		int key=upper_bound(a,a+num,t)-a;
		a[key]=t;
		
		}
		
		sort(a,a+num);
		max=a[num-1];
	}
	printf("%d",num);
	return 0;
	
}

。。。。。。。。。。。。。。

下面是我的AC代码:
《其实就是把上一个代码的sort去了
然后发现这道题根本没必要用SORT ,1因为我们对比已有的最大值更大的值采取的方法是将这个数赋给a[num],num++,能排在原来数组内的数一定是一个比这个位置的原来的数小,比这个位置的前一个数大的数,,,,,,因此这个数组是递增的,于是乎
思路大概是:
1.先和最大的那个数进行比较,即a[num-1],如果比他大则将这个数赋给a[num],num++;否则2.
2.直接利用upper—bound 函数判断插入的位置,
。。。。。。。。。

#include<cstdio>
#include<algorithm>
using namespace std;
int a[100000+10];

int main(){
	int n,num=0;
	scanf("%d",&n);
	int i,j,t,max=0;
	for(i=0;i<n;i++)
	{
		scanf("%d",&t);
		if(max< t){
			a[num]=t;
			num++;
		}
		else {
		int key=upper_bound(a,a+num,t)-a;
		a[key]=t;
		
		}
		
		
		max=a[num-1];
	}
	printf("%d",num);
	return 0;
	
}

以下思路FROM
1 s.insert(0); 首先先放一个0;
2 *s.rbegin() 表示set 的最后一个元素即最大的值; 注意小星星
3 s.erase( * (s.upper_bound(m)) ); 注意小星星
4 s.insert(m); 因为set存放有序的数所以直接insert
5 s.size() -1 记得减一哦

#include<set>
#include<cstdio>
using namespace std;
int main(){
	set<int > s;
	int n;
	scanf("%d",&n);
	int i,m;
	s.insert(0);
	for(i=0;i<n;i++){
		scanf("%d",&m);
		if(m >*s.rbegin() ){
			s.insert(m); 
		}else {
		s.erase(*(s.upper_bound(m)) );
		s.insert(m); 	
		}
	}
	printf("%d",s.size() -1);
	return 0; 
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列车调度问题PTA 的相关文章

  • L2-034 口罩发放 (25 分)

    好恶心的一道题 就因为我把有症状的人用set存 结果一直卡在后三个样例 把我恶心吐了 最后实在没法把set改成vector顺便标记一下看看是否访问过一次 然后就过了 我tm改了接近两个小时 结果就卡在这 include
  • 国教 2019级 算法设计与分析 作业集锦(期末作业)

    7 1 寻找第k小的数 20 分 给定若干整数 请设计一个高效的算法 确定第k小的数 输入格式 测试数据有多组 处理到文件尾 每组测试数据的第1行输入2个整数n k 1 k n 1000000 第2行输入n个整数 每个数据的取值范围在0到1
  • 【PTA】约瑟夫环问题

    n个小孩围成一圈 从第一个小孩开始从1到m报数 报到m的小孩出列 下一个小孩继续从1开始报数 出列的小孩不参与报数 问小孩的出列顺序 import java util public class Main public static void
  • 6-11 删除字符 (20 分)

    本题要求实现一个删除字符串中的指定字符的简单函数 函数接口定义 void delchar char str char c 其中char str是传入的字符串 c是待删除的字符 函数delchar的功能是将字符串str中出现的所有c字符删除
  • 【PTA】数字黑洞123

    任意给定一个整数 数出这个数中的偶数个数 奇数个数 及这个数中所包含的所有位数的总数 然后将得到的这三个数按照 偶 奇 总 的位序重新排列 得到一个新的整数 将得到的新的整数重复上面的操作 经过有限次的这样的重复操作后 最终得到123这个整
  • 数字黑洞 C语言

    题目 给定任一个各位数字不完全相同的 4 位正整数 如果我们先把 4 个数字按非递增排序 再按非递减排序 然后用第 1 个数字减第 2 个数字 将得到一个新的数字 一直重复这样做 我们很快会停在有 数字黑洞 之称的 6174 这个神奇的数字
  • 【PTA】数组排序

    对n个整数进行降序排列 然后输出 import java util public class Main public static void main String args Scanner scanner new Scanner Syst
  • Advanced Level 1001 A+B Format (20 point(s))

    PAT甲级系列 PAT Advanced Level 文章目录 英文 Title Input Specification Output Specification Sample Input Sample Output 中文 题目 输入格式
  • 【PTA】数组合并

    合并两个升序数组 使得合并后的数组仍然是升序 输入格式 输入两个整数n和m 表示两个数组的长度 接着输入n个整数表示第一个数组的元素 然后输入m个整数表示第二个数组的元素 要求输入时按升序输入 import java util public
  • 考试座位号 C语言

    每个 PAT 考生在参加考试时都会被分配两个座位号 一个是试机座位 一个是考试座位 正常情况下 考生在入场时先得到试机座位号码 入座进入试机状态后 系统会显示该考生的考试座位号码 考试时考生需要换到考试座位就座 但有些考生迟到了 试机已经结
  • 使用matplotlib绘制饼图

    根据消费类别 如外卖 零食 衣服 娱乐等 使用matplotlib绘制本月的消费支出饼图 以代码插入方式提交源代码 并以图像文件提交运行截图 python代码 import matplotlib pyplot as plt from pyl
  • 7-10 查找指定字符 (15分)

    7 10 查找指定字符 15分 本题要求编写程序 从给定字符串中查找某指定的字符 输入格式 输入的第一行是一个待查找的字符 第二行是一个以回车结束的非空字符串 不超过80个字符 输出格式 如果找到 在一行内按照格式 index 下标 输出该
  • L1-020 帅到没朋友(java)

    1 题目详情 当芸芸众生忙着在朋友圈中发照片的时候 总有一些人因为太帅而没有朋友 本题就要求你找出那些帅到没有朋友的人 输入格式 输入第一行给出一个正整数N 100 是已知朋友圈的个数 随后N行 每行首先给出一个正整数K 1000 为朋友圈
  • 【PTA】斐波那契数列第n项

    求斐波那契数列的第n项 f n f n 1 f n 2 其中f1 f2 1 import java util public class Main public static void main String args Scanner sca
  • PTA L1-058 6翻了(详解)

    前言 内容包括 题目 代码实现 大致思路 代码解读 题目 666 是一种网络用语 大概是表示某人很厉害 我们很佩服的意思 最近又衍生出另一个数字 9 意思是 6翻了 实在太厉害的意思 如果你以为这就是厉害的最高境界 那就错啦 目前的最高境界
  • 7-4 输出三角形字符阵列 (15 分)

    7 4 输出三角形字符阵列 15 分 本题要求编写程序 输出n行由大写字母A开始构成的三角形字符阵列 输入格式 输入在一行中给出一个正整数n 1 n lt 7 输出格式 输出n行由大写字母A开始构成的三角形字符阵列 格式见输出样例 其中每个
  • Basic Level 1025 反转链表 (25分)

    题目 给定一个常数 K 以及一个单链表 L 请编写程序将 L 中每 K 个结点反转 例如 给定 L 为 1 2 3 4 5 6 K 为 3 则输出应该为 3 2 1 6 5 4 如果 K 为 4 则输出应该为 4 3 2 1 5 6 即最后
  • Basic Level 1092 最好吃的月饼 (20分)

    题目 月饼是久负盛名的中国传统糕点之一 自唐朝以来 已经发展出几百品种 若想评比出一种 最好吃 的月饼 那势必在吃货界引发一场腥风血雨 在这里我们用数字说话 给出全国各地各种月饼的销量 要求你从中找出销量冠军 认定为最好吃的月饼 输入格式
  • Basic Level 1034 有理数四则运算 (20分)

    题目 本题要求编写程序 计算 2 个有理数的和 差 积 商 输入格式 输入在一行中按照 a1 b1 a2 b2 的格式给出两个分数形式的有理数 其中分子和分母全是整型范围内的整数 负号只可能出现在分子前 分母不为 0 输出格式 分别在 4
  • PTA基础题练习-检查密码

    PTA 检查密码 本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能 该网站要求用户设置的密码必须由不少于6个字符组成 并且只能有英文字母 数字和小数点 还必须既有字母也有数字 输出格式 输入样例 输出样例 本题要求你帮助某网站

随机推荐

  • 2D人体姿态估计 - Convolutional Pose Machines(CPM)

    https github com namedBen Convolutional Pose Machines Pytorch https github com timctho convolutional pose machines tenso
  • QFileDialog打开文件夹,获得文件名(getOpenFileName,getExistingDirectory)

    1 QFileDialog getOpenFileName 示例 括号里的参数分别是 指定父类窗口部件 对话框使用的标题 默认打开后显示的目录 即告诉它从哪一级目录开始 右下角的文件过滤器 QString file name QFileDi
  • MongoDB复制集数据是如何复制的

    MongoDB 复制集 MongoDB复制集的主要意义在于实现服务高可用 类似于Redis中的哨兵模式 它主要提供两个方面的功能 1 数据写入主节点 Primary 时将数据复制到另一个副本节 Secondary 点上 2 主节点发生故障时
  • Android UI 之居中绘制文本内容的正确方法——实现自定义一个TextView

    原文地址 http blog csdn net carrey1989 article details 10399727 我们在自定义一个控件的时候 有时候会需要自己来绘制一些文本内容 这样就自然而然遇到确定文本的方位的问题 比如文本需要水平
  • 蓝桥杯-最少砝码(2021题)

    问题描述 你有一架天平 现在你要设计一套砝码 使得利用这些砝码可以称出任意 小于等于 NN 的正整数重量 那么这套砝码最少需要包含多少个砝码 注意砝码可以放在天平两边 输入格式 输入包含一个正整数 N 输出格式 输出一个整数代表答案 样例输
  • Java实现Excel导入导出操作详解

    前言 本次封装是基于 POI 的二次开发 最终使用只需要调用一个工具类中的方法 就能满足业务中绝大部门的导入和导出需求 1 功能测试 1 1 测试准备 在做测试前 我们需要將 2 环境准备 中的四个文件拷贝在工程里 如 我这里均放在了com
  • AD20笔记-PCB设计

    AD20笔记 文章目录 AD20笔记 PCB设计 新建PCB 导入原理图元器件 估计板子的大小 隐藏网络 机械层绘制放置区域 设置原点 设置板子大小 层叠管理器 正片负片 模块化分布 导入DXF文件 单独查看某一层 相连走线选择 精准移位吸
  • 解析隐式类型转换操作operator double() const,带你了解隐式转换危害有多大

    目录 前言 隐式类型转换操作符 使用注意 解决方案 深思 构造函数造成的隐式转换 分析 总结 解决方案 explicit关键字 引入Proxy classes 代理类 总结 前言 我首次看到这种函数的时候是在Flightgear飞行模拟器的
  • scatter绘制散点图示例

    scatter绘制散点图示例 1 example 1 from sklearn import datasets digits datasets load digits import matplotlib pyplot as plt colo
  • Pytorch学习(6) —— 加载模型部分参数的用法

    上一节 我们给出了模型加载和保存的简要示例 但是 我们有时候会用别人的参数 他们的层参数名和我们的名称很容易不同 因此这里将会对源码进入深入剖析 分析参数提取和保存是如何实现的 我们使用pytorch的VGG16预训练模型 加载 返回其类型
  • 【云原生之kubernetes】helm在k8s集群中的基本使用

    云原生之kubernetes helm在k8s集群中的基本使用 一 检查kubernetes环境 1 检查kubernetes节点状态 2 检查helm状态 二 helm的V2版本和V3版本区别 1 主要区别 2 版本架构的变化 3 V3版
  • STM32写的PID算法温度控制程序示例

    使用STM32写的PID算法温度控制程序示例 该程序通过读取温度传感器的数据 并采用PID控制算法 输出PWM信号来控制加热器的工作 以实现温度的稳定控制 include stm32f10x h define TIM PERIOD Syst
  • C++和QML之间传输JSON字符串并解析(适用于传数组或其他复杂参数)

    QJsonObject转为QString 发送带此QString的信号 QML中接收到信号后直接用JSON进行解析 QML支持Javascript 自然也支持相应的json解析 同理 可以在QML中将javascript对象先转换成json
  • 这几款好用的数据分析软件推荐给你

    随着互联网和大数据时代的到来 数据分析已成为越来越多公司和个人必备的技能之一 而在进行数据分析时 一个好用 功能齐全的数据分析软件是至关重要的工具 在市场上 有很多不同的数据分析软件可供选择 但其中哪些才是最好的呢 今天我将向大家介绍几款我
  • 手撸代码-链表中的节点每k个一组翻转-牛客

    描述 将给出的链表中的节点每 k k 个一组翻转 返回翻转后的链表 如果链表中的节点数不是 k k 的倍数 将最后剩下的节点保持原样 你不能更改节点中的值 只能更改节点本身 要求空间复杂度 O 1 O 1 例如 给定的链表是1 2 3 4
  • JQuery的链式编程与隐式迭代

  • 华为OD机试真题-投篮大赛【2023.Q1】

    题目内容 你现在是一场采用特殊赛制投篮大赛的记录员 这场比赛由若干回合组成 过去几回合的得分可能会影响以后几回合的得分 比赛开始时 记录是空白的 你会得到一个记录操作的字符串列表 ops 其中ops i 是你需要记录的第i项操作 ops遵循
  • pytorch中一维卷积Conv1d简介

    最近在使用pytorch中的一维卷积来对文本进行处理 进行文本分类任务 查阅了网上相关的博客还有api这里做一个总结 一维卷积 顾名思义就是在一维空间上进行卷积 通常用来处理时序的数据 卷积的过程如下图 进行卷积的数据形状为 batch s
  • IntelliJ IDEA 使用教程

    一 设置入口 1 快捷键 Ctrl Alt S 2 File gt Settings 3 View gt appearance gt Toolbar 单击选中 出现工具栏图标 以后可直接点击它进入设置界面 之后的相关设置后 请点击Apply
  • 列车调度问题PTA

    7 20 列车调度 25 分 火车站的列车调度铁轨的结构如下图所示 两端分别是一条入口 Entrance 轨道和一条出口 Exit 轨道 它们之间有N条平行的轨道 每趟列车从入口可以选择任意一条轨道进入 最后从出口离开 在图中有9趟列车 在