模拟栈,贴一个答案就是了 02-线性结构4 Pop Sequence (25 分)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Yonggie/article/details/89409919

最最最intuitive的方法,直接模拟栈就行。

主要是一些细节问题,蛮烦的。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include <stack> 
using namespace std;
int main()
{
	int m,n,c;
	while(cin>>m>>n>>c){
		for(int index=0;index<c;index++){
			stack<int> S;
			int t=0;
			cin>>t;
			//previous记录前面最大值,以便压栈。 
			int previous=t;
			bool f=1;
			for(int i=1;i<=t;i++)
				S.push(i);
			if(S.size()>m||t>n) f=false;
			S.pop();
			//这里有个小细节,我为什么不i<t就行了,还要把i压进去然后再pop掉呢?
			//就是因为题目有栈容量的限制,要先把所有的元素压进去,看看超不超才行。 
			
			for(int i=0;i<n-1;i++){
				cin>>t;
				if(!f) continue;
				if(t>previous){
					for(int j=previous+1;j<=t;j++)
						S.push(j);
					
					if(S.size()>m||t>n) f=false;
					S.pop();
				}
				else{
					if(S.top()!=t) f=false;
					else S.pop();
				}
				
				if(t>previous) 
					previous=t;
			}
			
			
			
			if(f) cout<<"YES";
			else cout<<"NO";
			cout<<endl;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/Yonggie/article/details/89409919
今日推荐