刷题
题意:栈的容量是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好难呀