在地球的某个地方,有一个非常古老的火车站。这个车站只有一个如图所示的Y字型铁轨,并且火车只能经过A点驶入车站(设行驶方向为正),到达岔路口时反向经过B点驶出车站或者进入站台等待。一辆有n节车厢的火车驶入车站,火车的每一节车厢在经过A点的时候都会按照进入车站的先后顺序从1开始被编号。右图为5节车厢从A点进入站台时的情况(箭头表示火车的行驶方向)。设A点和B点与站台间的距离还有站台的容量足够大,并且每节车厢能独立运行。你的任务就是编写一个程序判断列车实际上的出站顺序是否能满足给出的顺序。如果能,输出“Yes”,否则输出“No”(不含引号),每次输出占一行。
代码如下:
#include<stdio.h> int n; int a[1000000]; int b[1000000]; int c[1000000]; void panduan(int); int main (void) { int i; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) { a[i]=i; } for( i=1;i<=n;i++) { scanf("%d",&b[i]); } panduan(n); } return 0; } void panduan(int n) { int top=0; int aflag=1; int bflag=1; for(int i=0;i<n;i++) { c[++top]=a[aflag++]; while(top>0&&c[top]==b[bflag]) { bflag++; top--; } } if(top!=0) { printf("No\n"); } else { printf("Yes\n"); } }