列车进站
★实验任务 一天,小L 突然对列车的进出站问题产生了兴趣,如下图所示:
列车只能从A 进站,或从B 出站。
列车从A 进站,进站顺序为 1, 2, 3, 4, 5
列车从B 出站,出站顺序为 5, 4, 3, 2, 1
现在,小L 想知道:
列车从A 进站,进站顺序为 1~n
列车从B 出站,给定出站的顺序,判断是否可能按照这个顺序出站
★数据输入
第一行一个正整数 n(1<=n<=1000)。
第二行包含n 个正整数,为 1~n 的某个排列
★数据输出
若能够按照给定的顺序出站,输出”YES”(没有引号)
否则,输出”NO”(没有引号)
思路:按出站顺序倒推入站顺序
#include<iostream>
#include<string>
using namespace std;
int main()
{
int a[10000],b[10000],c[10000];
a[0]=0;b[0]=0;c[0]=0;
int heada=0,headb=0,headc=0;
int n;
cin>>n;
int i,j;
for(i=1;i<=n;i++)
{
cin>>c[i];headc++;//出站顺序
}
for(;;)
{
if(headc==0)
{
for(;;)
{
a[++heada]=b[headb--];
if(headb==0)
{
break;
}
}
break;
}//空栈时全部弹出
if(b[headb]>c[headc])
{
for(;;)
{
a[++heada]=b[headb--];
if(headb==0)
{
break;
}
}
}//出站列车回栈,当入栈的元素小于栈顶,全部弹出
b[++headb]=c[headc--];
}
for(i=1;i<=heada;i++)
{
if(a[i]<=a[i+1])
{
cout<<"NO";
return 0;
}
}//不为递增序列,否
cout<<"YES";
return 0;
}