每辆火车都从A方向驶入车站,再从B方向驶出车站,同时它的车厢可以进行某种形式的重新组合。假设从A方向驶来的火车有n节车厢(n<1000),分别按顺序编号为1,2,...,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

5 4 1 2 3

No

6

6 5 4 3 2 1

Yes

 #include<cstdio>
#include<stack>
using namespace std; const int maxn = + ;
int n, target[maxn]; int main()
{
while(scanf("%d", &n)==)
{
stack<int> s;
int A = , B = ;
for(int i = ; i <= n; i++)
scanf("%d", &target[i]);
int ok = ;
while(B <= n) //B表示出栈的车的数量
{
if(A==target[B]) //A表示出栈数量加上入栈车辆和
{
A++; B++;
}
else if(!s.empty()&&s.top()==target[B])
{
s.pop(); B++;
}
else if(A<=n) s.push(A++);
else
{
ok = ; break;
}
}
printf("%s\n", ok ? "Yes" : "No");
}
return ;
}

最新文章

  1. [spring]03_装配Bean
  2. Git和Code Review流程
  3. js 转码 和 .Net 后台解码
  4. svg转化成canvas以便生成base64位的图片
  5. Redis学习笔记1-Redis数据类型
  6. String与InputStream互转的几种方法
  7. Ubuntu ( Linux) Eclipse 乱码问题
  8. ADF_Database Develop系列2_设计数据库表之Table Partitions/Create Users/Generate DDL
  9. Ninx虚拟主机的配置
  10. FQ技术
  11. android 开发中的常见问题
  12. 封装数据库mysql, mysqli
  13. MySQL的时间进位问题
  14. Centos环境下部署游戏服务器-编译
  15. C# WebBrowser 设置代理完全解决方案
  16. C语言程序设计基础
  17. (大数据工程师学习路径)第四步 SQL基础课程----约束
  18. webapi中使用Route标签
  19. ASP.NET Core Web API 与 SSL
  20. Autofac之依赖注入

热门文章

  1. C# 接口的隐式与显示实现说明
  2. MyReport报表引擎2.7.8.8公布
  3. Linux的IO栈
  4. C# virtual,override,new 整理
  5. Highways - poj 2485 (Prim 算法)
  6. wps文档怎样去除广告
  7. 卸载系统自带libevent
  8. Web存储使用详解(本地存储、会话存储)
  9. C语言基础知识【函数】
  10. java jdbc连接数据库,Properties 属性设置参数方法