1357:车厢调度(train)

简介: 1357:车厢调度(train)

1357:车厢调度(train)

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

有一个火车站,铁路如图所示,每辆火车从A驶入,再从B方向驶出,同时它的车厢可以重新组合。假设从A方向驶来的火车有n节(n≤1000),分别按照顺序编号为1,2,3,…,n。假定在进入车站前,每节车厢之间都不是连着的,并且它们可以自行移动到B处的铁轨上。另外假定车站C可以停放任意多节车厢。但是一旦进入车站C,它就不能再回到A方向的铁轨上了,并且一旦当它进入B方向的铁轨,它就不能再回到车站C。

负责车厢调度的工作人员需要知道能否使它以a1,a2,…,an的顺序从B方向驶出,请来判断能否得到指定的车厢顺序。

【输入】

第一行为一个整数n,其中n≤1000,表示有n节车厢,第二行为n个数字,表示指定的车厢顺序。

【输出】

如果可以得到指定的车厢顺序,则输出一个字符串“YES”,否则输出“NO”(注意要大写,不包含引号)。

【输入样例】

5

5 4 3 2 1

【输出样例】

YES

【提示】

解析:观察发现,整个调度过程其实是在模拟入栈出栈的过程,而这个过程中,我们可以分成三种状态:栈前、栈中、栈后。我们可以发现,当某个数字出栈了,说明比它小的数字要么已经出栈了,要么还在栈里,不能是入栈前状态,并且在栈中的顺序是从大到小的(从栈顶往栈底看),比如出5,那么1,2,3,4要么已经在5之前出了,要么还在栈中(假如1,3,4在栈中,从栈顶往栈底看依次为4,3,1),不能是入栈前的状态。如果某个数字要出栈,那么当前在栈中的数字都必须小于它,否则就与栈的性质矛盾,不合法,于是我们可以这样解决:

从第一个数字开始扫描,a[i]表示当前出栈的数字,如果有比a[i]大的数字还在栈中,那么就产生矛盾,输出“NO”;否则,标记当前数字a[i]为栈后状态,那么[1, a[i]-1]这些数字如果还没出栈,标记为栈中状态。具体我们可以用0表示为确定状态,1表示栈中状态,2表示栈后状态。

1. 
2. #include <iostream>
3. #include <stack>
4. using namespace std;
5. stack<int> st;
6. int p[1005];
7. int main(int argc, char *argv[])
8. {
9.  int n;
10.   cin>>n;
11.   for(int i=1;i<=n;i++){
12.     cin>>p[i];
13.   }
14.   int t=1;
15.   for(int i=1;i<=n;i++){
16.     while(p[i]>=t) {
17.         st.push(t++);
18.     }
19.     if(st.top()==p[i]) st.pop();
20.     else if(st.top()>p[i]){
21.       cout<<"NO"<<endl;
22.       return 0;
23.     }
24.   }
25.   cout<<"YES"<<endl;
26.   return 0;
27. }
1. #include <iostream>
2. #include <stack>
3. using namespace std;
4. int a[1005];
5. int main(int argc, char *argv[])
6. {
7.  int n;
8.  cin>>n;
9.  stack<int> s;
10.   for(int i=1;i<=n;i++) cin>>a[i];
11.   int k=1;
12.   for(int i=1;i<=n;i++){
13.     s.push(i);
14.     while(k<=n && s.size() && a[k]==s.top()){
15.       s.pop();k++;
16.     }
17.   }
18.   if(!s.size()) cout<<"YES"<<endl;
19.   else cout<<"NO"<<endl;
20.   return 0;
21. }

 

相关文章
|
10月前
|
算法 调度
【电动车优化调度】基于模型预测控制(MPC)的凸优化算法的电动车优化调度(Matlab代码实现)
【电动车优化调度】基于模型预测控制(MPC)的凸优化算法的电动车优化调度(Matlab代码实现)
|
11月前
|
算法 调度
【车间调度】基于模拟退火优化算法的的并行车间机器优化调度(Matlab代码实现)
【车间调度】基于模拟退火优化算法的的并行车间机器优化调度(Matlab代码实现)
|
11月前
|
机器学习/深度学习 算法 调度
【车间调度】基于卷积神经网络的柔性作业车间调度问题的两阶段算法(Matlab代码实现)
【车间调度】基于卷积神经网络的柔性作业车间调度问题的两阶段算法(Matlab代码实现)
136 0
|
11月前
|
机器学习/深度学习 算法 安全
【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)
【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)
109 0
|
12月前
|
调度 C语言 C++
PTA L2-014 列车调度(25分)
两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度? 输入格式: 输入第一行给出一个整数N (2 ≤ N ≤105),下一行给出从1到N的整数序号的一个重排列。数字间以空格分隔。 输出格式: 在一行中输出可以将输入的列车按序号递减的顺序调离所需要的最少的铁轨条数。
100 0
|
机器学习/深度学习 传感器 算法
【车间调度】基于模拟退火结合粒子群算法求解车间调度问题含Matlab代码
【车间调度】基于模拟退火结合粒子群算法求解车间调度问题含Matlab代码
|
机器学习/深度学习 传感器 算法
【车间调度】基于遗传算法求解具有时间约束的车间调度问题度matlab代码
【车间调度】基于遗传算法求解具有时间约束的车间调度问题度matlab代码
|
传感器 机器学习/深度学习 算法
【PID优化】基于灰狼优算法优化分数阶 PD 滑模控制器附matlab代码
【PID优化】基于灰狼优算法优化分数阶 PD 滑模控制器附matlab代码
|
调度
L2-014 列车调度 (25 分)(二分)
L2-014 列车调度 (25 分)(二分)
147 0
L2-014 列车调度 (25 分)(二分)
|
调度 C++ 容器
7-55 列车调度 (25 分)
7-55 列车调度 (25 分)
93 0
7-55 列车调度 (25 分)

热门文章

最新文章