13.判断出栈序列——栈

请判断:指定的序列能否仅由 入栈 和 出栈 操作得到。

输入:
有若干组数据输入
每组数据中,第一行为两个个整数 n 和 m。n 表示需要依次从 1~n 入栈,m 表示这组数据有 m 个出栈序列需要判断,当 n=0 且 m=0 时停止。
接下来有行,每行表示一个出栈序列

输出:
对每一个出栈序列,如果能正常出栈,则输出 Yes,否则输出 No。

sample:

input:
5 2
1 2 3 4 5
5 4 1 2 3
6 1
6 5 4 3 2 1
0 0

output:
Yes
No

Yes

#include<iostream>
#include<stack>
using namespace std;
int n,m,a[10005];
stack<int>s;
int main()
{
	int cnt=0,j;
	bool flag;
	while(cin>>n>>m)
	{
		if(!n&&!m)
			break;
		cnt++;
		if(cnt>1)
			cout<<endl;
		while(m--)
		{
			flag=true,j=1;
			for(int i=0;i<n;i++)
				cin>>a[i];
			for(int i=0;i<n;i++)
			{
				if(!flag)
					continue;
				for(;j<=a[i];j++)
					s.push(j);
				if(s.top()!=a[i])
				{
					flag=false;
					continue;
				}
				s.pop();
			}
			if(flag)
				cout<<"Yes"<<endl;
			else
				cout<<"No"<<endl;
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/ArgentumHook/article/details/83352905