1051 Pop Sequence 需再做

Posted CSU迦叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1051 Pop Sequence 需再做相关的知识,希望对你有一定的参考价值。

1. 很精致的一道题,直接就没思路翻书解决的。关键语句是,在for循环中嵌套while循环,每个for循环入栈一个元素,然后while循环判断栈顶元素是否和要判断的序列的当前元素相同,如果相同,弹栈+序列指针后移

2. 注意弹栈之前都要判空,另外最后要满足栈为空才能说明指定序列正确。

AC代码

#include<cstdio>
#include<map>
#include<set>
#include<string>
#include<cstring>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<algorithm>

using namespace std;

const int maxn = 1010;

stack<int> st;

int que[maxn];

int main(){
	
	int sl,ql,qn;//栈的深度,待检验序列长度,待检验序列数量 
	scanf("%d%d%d",&sl,&ql,&qn);
	
	while(qn--){
	
		//清空栈 
		while(!st.empty())st.pop();
		
		//读入待检验的出栈序列 
		for(int i=0;i<ql;i++){
			scanf("%d",&que[i]);
		}
		
		int cur = 0;//指向出栈序列的当前元素
		bool isValid = true;//是否合法
		
		for(int i=1;i<=ql;i++){
			st.push(i);
			
			if(st.size()>sl){
				isValid = false;
				break;
			}
			
			//当栈顶元素和序列当前元素的位置相同
			while(!st.empty()&&st.top()==que[cur]){
				cur ++;
				st.pop();
			} 
		} 
		
		if(isValid&&st.empty())printf("YES\\n");
		else printf("NO\\n"); 
		
	}
	
	return 0;
}

以上是关于1051 Pop Sequence 需再做的主要内容,如果未能解决你的问题,请参考以下文章

PAT1051. Pop Sequence (25)

1051 Pop Sequence

1051 Pop Sequence

1051. Pop Sequence (25)

1051. Pop Sequence (25)

1051. Pop Sequence (25)