怎么判断可能的出栈顺序?这和我们人判断的思路不太一样。
答:1.先把题目需要判断的顺序存入vector;
2.定义 cur =1的指针。因为0题目没有涉及。
3.用for对堆栈进行push,push的是范围内的数。
4.如果栈顶元素= =vector[cur] 就pop
5.如果最终cur = =vector.size()+1就说明可能,否则不行。
#include<stack>
#include<vector>
#include<cstdio>
using namespace std;
int main(){
int m,n,k;
scanf("%d %d %d ",&m,&n,&k);
for(int k1=0;k1<k;k1++){
vector<int> v(n+1);
stack<int> st;
for(int i=1;i<=n;i++){
scanf("%d",&v[i]);
}
int cur=1;
bool f=false;
for(int i=1;i<=n;i++){
st.push(i);
if(st.size()>m) break;
while(!st.empty()&&st.top()==v[cur]){
st.pop();
cur++;
}
}
if(cur==n+1) f=true;
f==true?printf("YES\n"):printf("NO\n");
}
return 0;
}