1051 Pop Sequence (25分)栈

时间:2022-10-30 12:06:55

刷题

1051 Pop Sequence (25分)栈

题意:栈的容量是5,从1~7这7个数字,写5个测试数据

做法:模拟栈

#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
int a[maxn];
stack<int> st;//不用定义大小呀,
//题目那也只是意味着,到那个大小你需要判断一下,并不是让你真的构造一个那么样大小的栈,
//如果要是越界了还会报错,难道你还要写异常不成?
int main() {
int M,N,K;
cin>>M>>N>>K;
for(int j=0; j<K; j++) {
while(!st.empty()){//压根就没想到,要把之前没有清空的栈这样清空
st.pop();
}
for(int i=0; i<N; i++) cin>>a[i];
int z=0,flag=1;
for(int i=1; i<=N; i++) {
st.push(i);
if(st.size()>M){//栈的size()
flag=0;
break;
}
while(!st.empty() &&st.top()==a[z]){//这里没搞明白,第1次写的是if,而不是while
//而自己在脑子里的推演也应该是,如果需要出栈就一直出栈的,可写在代码里却不是那样
z++;
st.pop();
}
}
if(j!=0)cout<<endl;
if(flag && st.empty()==true)cout<<"YES";//自己定义的flag是一意味着成功,可是最开始写的时候
//还是写成了!flag,头脑都僵住了
else cout<<"NO";
}
}

唉,好难呀,2021好难呀