PAT甲級1051 【Pop Sequence】 (25)

NO IMAGE

棧模擬,我用的是比較笨的方法,直接貼程式碼

#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
const int maxn = 1e3 10;
bool vis[maxn];
int main(){
//freopen("in.txt", "r", stdin);
int m, n, k, num, top;
cin >> m >> n >> k;
for(int i = 0; i<k;   i){
bool flag = true;
stack<int> s;
top = 0;
memset(vis, false, sizeof vis);
for(int j = 0; j<n;   j){
cin >> num;
if(!flag) continue;
if(num > top){
for(int i = top 1; i<=num;   i){
if(!vis[i]){
s.push(i);
if(i != num) top = i; //棧頂為第一個小於num且沒有vis的元素 
}
if(s.size() > m) flag = false;
}
s.pop();
vis[num] = true;
}
else if(num < top)  flag = false;
else {
s.pop();
vis[top] = true;
for(; top>=0; top--){
if(!vis[top]) break; //重新獲取棧頂 
}
}
}
if(flag) cout << "YES\n";
else cout << "NO\n";
}
return 0;
}