列车进站
★实验任务 一天,小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;	
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号