L2-1 出栈序列的合法性 (25 分)——简单思路

文章目录

思路

入栈顺序是:1,2,3,4,5…
给出一个出栈顺序,让你判断是否合法,我们模拟入栈出栈顺序,从1开始入栈,如果当前栈顶是当前出栈的元素,那么当前栈顶出栈,否则就一直入栈,知道栈满或者当前出栈元素入栈。

AC代码

#include<bits/stdc++.h>
#define rep(i,x,y) for(int i=x; i<=y; ++i)
#define per(i,x,y) for(int i=x; i>=y; --i)
#define pushk push_back
#define popk pop_back
#define mem(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define ll long long
#define lp p<<1
#define rp p<<1|1
#define emk emplace_back
#define INF 0x3f3f3f3f
using namespace std;
const int N = 1e5+9;
int stk[N],a[N];
int main() {

	int m,n,K;
	cin>>m>>n>>K;
	while(K--){
		int tt=0,idx=0,ok=1;
		stk[++tt]=++idx;
		rep(i,1,n) cin>>a[i];
		rep(i,1,n){	
			while(stk[tt]!=a[i]&&tt<m) stk[++tt]=++idx;
			if(stk[tt]!=a[i]){
					ok=0;
					break;
			}
			else tt--;
		}
		if(ok) puts("YES");
		else puts("NO");
	}	
	return 0;
}
/*
4 4
0023
5 2
01010
5 3
01010
*/
posted @ 2022-08-28 08:42  翔村亲亲鸟  阅读(51)  评论(0编辑  收藏  举报