天天看點

1051. Pop Sequence (25)

//題目大意:給出棧的最大容量 數列的長度 測試樣例的數量 判斷每個測試序列是否能夠由該棧得到
//思路:
//1.使用stl中的stack stack的size按照題設條件确定 (1)按順序将數字入棧 (2)棧頂元素等于目前出棧序列元素時 将棧中元素出棧 (3)當不相等時入棧
//2.當超過棧的容量時 當元素全部入棧 而棧頂元素不等于目前出棧元素時 判斷為NO (4)當全部元素入棧 出棧序列周遊完後 棧為空時 判斷為yes

#include <iostream>
#include <stack>
#include <vector>
using namespace std;

int main(){
    int m, n, k;
    cin >> m >> n >> k;

    while (k--) {
        int flag = 1;
        stack<int> st;
        vector<int> temp(n);
        for (int i = 0; i < n; i++) {
            cin >> temp[i];
        }
        int t = 0;
        for (int i = 0; i < n; i++) {
            st.push(i+1);
            if (st.size() > m) {
                flag = 0;
                break;
            }
            while(st.top() == temp[t]) {
                st.pop();
                t++;
                if (st.empty()) {
                    break;
                }
            }
        }
        if (!st.empty()) {
            flag = 0;
        }
        if (flag) {
            cout << "YES\n";
        }else{
            cout << "NO\n";
        }

    }

}           

繼續閱讀