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;
    }
    
  • 相关阅读:
    .Net Remoting(应用程序域) Part.1(转载)
    .net 中读取自定义Config文件
    WebBrowser控件说明
    Delphi常用技巧 3
    句柄3
    句柄5
    点击TWebBrowser中的超级链接不在新的IE窗口打开
    句柄2
    webbrower
    句柄4
  • 原文地址:https://www.cnblogs.com/wdt1/p/13726244.html
Copyright © 2011-2022 走看看