【1051 25 栈模拟】

传送门

题意

给定一个栈的容量 \(n\)\(m\),入栈是按照 \(1\sim m\) 顺序,给定 \(k\) 个出栈序列,判断每个序列是否是正确的出栈序列

数据范围

\(n\leq 1000\)

题解

  • 数组模拟栈
  • 遍历当前序列,每次将按照进入顺序将所有小于的进栈
    • 进行判断如果当前栈顶和当前数不对应就不是正确的

Code

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n,m,k; cin>>n>>m>>k;
	vector<int>a(m);
	while(k--){
		int stk[n],tp=0;
		for(int i=0;i<m;i++) cin>>a[i];
		int l=0,r=1;
		bool flag=1;
		while(flag && l<m){
			while(a[l]>=r && tp<n)
				stk[++tp]=r++;
			if(tp && stk[tp]==a[l]) tp--,l++;
			else flag=0;
		}
		if(flag) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
}```
posted @ 2021-02-24 16:53  Hyx'  阅读(62)  评论(0)    收藏  举报