【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;
}
}```

浙公网安备 33010602011771号