列车进站

★实验任务 一天,小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;	
}

 

posted @ 2022-09-26 20:22  墨燃云  阅读(242)  评论(0编辑  收藏  举报