货车分拣
Problem
<分区>
需要确定是否可以使用堆栈对数字序列进行排序。
一列火车从轨道 1 到达死胡同(见图片)。允许一次从火车上解开一节或几节第一节车厢并将它们带到死胡同(如果您愿意,您甚至可以一次将整列火车带到死胡同)。之后,将部分车皮运到轨道2的一侧。然后你可以再将几节车皮运到死胡同,再次将部分车皮运到轨道2的一侧。以此类推,使得每节车皮仅从轨道 1 驶入死胡同一次,然后在轨道 2 离开死胡同一次。禁止从轨道 2 进入死胡同或离开轨道 1 的死胡同。如果不进入死胡同,就无法从路径 1 到达路径 2。
火车车厢最初的行驶顺序是已知的。要求按照指示操作,使火车车厢按顺序行驶(先是第一辆,然后是第二辆,以此类推,从火车头开始沿着轨道 2 远离死胡同计算)。写个程序看看能不能搞定。
输入
输入数字 N
—火车中的车厢数量 (\(1<=N<=2000\))。接下来是车厢编号,从在轨道 1 上行驶的火车头到尽头。汽车用从 1
到 N
的自然数编号,每个自然数恰好出现一次。
输出
当火车从尽头走轨道 2 时,是否可以让车厢按顺序从 1
到 N
,从火车头数起?如果可能,显示消息YES
。 如果不可能,打印NO
。
例子
<头>
<日>#日>
输入 |
输出 |
注意 |
东西>
<正文>
1 |
3
3 2 1
| 是 |
我们需要把整列火车带到死胡同,然后把它完全带到2号轨道 |
2 |
4
4 1 3 2
|
是
|
首先,您需要将两辆货车带到死胡同,其中一辆将留在死胡同,第二辆 —取出到2nd track,然后再带两辆车到死胡同,把站在死胡同的3辆车取出到2nd track |
3 |
3
2 3 1
| 没有 |
|
表>