zoukankan      html  css  js  c++  java
  • b_pat_弹出序列(栈模拟)

    给定一个最多能存 M 个数字的栈,将 1∼N 按顺序压入栈中,过程中可随机弹出栈顶元素。
    对于每个序列,如果可能是该栈的弹出序列,则输出一行 YES,否则输出一行 NO。

    思路
    一开始进栈元素一定是1(假设为v),然后因为给定的是出栈序列(假定为a),所以我们尝试将v递增至a[i](i∈[0,n)):

    • 如果能递增到a[i],则当前状态合法,停止入栈,且将栈顶元素(值为a[i])出栈
    • 否则,一定是因为栈顶元素不符合;或者栈容量超出m还没有遇到a[i]
    #include<bits/stdc++.h>
    using namespace std;
    int main() {
        std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
        int msz,n,k; cin>>msz>>n>>k;
    
        while (k--) {
            stack<int> st;
            int v=1, valid=1;
            for (int i=0; i<n; i++) {
                int x; cin>>x;
                while (st.empty() || (st.size()<msz && st.top()<x)) 
                    st.push(v++);
                if (st.top()!=x) valid=0;
                else             st.pop();
            }
            cout<<(valid?"YES":"NO")<<'
    ';
        }
        return 0;
    }
    
  • 相关阅读:
    Linux 套接字编程
    Linux 网络(连接)相关参数作用
    Python WSGI
    Ubuntu Cloud Image in Openstack
    AWK
    MySQL--开发技巧(一)
    spring MVC--配置注解
    javascript-JQuery样式篇(一)
    JSP--常用标签
    spring MVC basic
  • 原文地址:https://www.cnblogs.com/wdt1/p/13726244.html
Copyright © 2011-2022 走看看