uva514 Rails 栈相关问题

题目地址点击打开链接

·STL的stack头文件提供栈,用“stacks”方式定义,用push()和pop()实现元素的入栈和出栈操作,top()取栈顶元素(但不删除)

#include
#include
using namespace std;
const int MAXN =1000+10;

int n,m, target[MAXN];

int main()
{
	while (scanf("%d",&n)==1 && n)//数组实际长度 
	{
		while(scanf("%d",&m)==1 && m)//开头为0则该循环结束 
		{	
			stack s;//建栈 
			int A=1,B=1;
			target[1]=m;//出站顺序的第一个数为m 
			for(int i=2;i<=n;i++)
			scanf("%d",&target[i]);//从第二个开始输入出站顺序 
			int ok=1;//判断标志 
			while(B<=n)//B表示目标出站顺序编号,A表示进站顺序1~n 
			{
			if(A==target[B]) {A++;B++;}//若当前待进站编号A与目标出站编顺序号B相同,则A直接出站
			else if(!s.empty() && s.top()==target[B]) { s.pop(); B++;}//若栈非空且栈顶为标出站编顺序号B,则栈顶出栈 
			else if(A<=n) s.push(A++);//若不符合前两条则前待进站编号A进栈 
			else { ok=0; break;}//若A都进栈且不符合前两条,说明无法出站,判断标志为0 
			}
			printf("%s\n",ok?"Yes":"No");
		}
		printf("\n");//注意输出格式	 
	} 
	return 0;
} 

你可能感兴趣的:(ACM-ICPC)