zoukankan      html  css  js  c++  java
  • 数据结构专题 ——栈的应用 A1051.Pop Sequence(25)

    解法1:(自己码的)

    #include <bits/stdc++.h>
    #include<math.h>
    #include <string>
    using namespace std;
    const int MAXN = 10000;
    stack<int> stk;
    int main(){
        int M,N,K;
        scanf("%d%d%d",&M,&N,&K);
        int temp[N];
        bool flag;
        int size = 0;
        int current = 0;
        int minm = 1;
        for(int i= 0;i<K;++i){
            flag = true;
            size = 0;
            current = 0;
            minm = 1;
            for(int j = 0;j<N;++j){
                cin>>temp[j];
                /*current = i;
                while(stk.top() != temp[i]){
                    stk.push(minm);
                    minm++;
                    size++;
                    if(size > M){
                        cout<<"No"<<endl;
                        break;
                    }
                }
                if(size > M){
                    break;
                }
                stk.pop();
                size--;
                if(j == N-1){
                    cout<<"Yes"<<endl;
                }*/
            }
            for(int m = 0;m<N;++m){
                //cin>>temp[j];
                current = m;
                while(stk.size() == 0 || stk.top() != temp[current]){
                    stk.push(minm);
                    minm++;
                    size++;
                    if(size > M){
                        cout<<"NO"<<endl;
                        break;
                    }
                }
                if(size > M){
                    break;
                }
                stk.pop();
                size--;
                if(current == N-1){
                    cout<<"YES"<<endl;
                }
            }
        }
        system("pause");
        return 0;
    } 

    算法笔记版:

    #include <bits/stdc++.h>
    #include<math.h>
    #include <string>
    using namespace std;
    const int maxn = 1010;
    int arr[maxn];//保存题目给定的出栈序列
    stack<int> st;
    int main(){
        int m,n,T;
        scanf("%d%d%d",&m,&n,&T);
        while(T--){
            while(!st.empty()){//清空栈
                st.pop();
            }
            for(int i=1;i<=n;++i){//读入数据
                scanf("%d",&arr[i]);
            }
            int current = 1;//指向出栈序列中的待出栈元素
            bool flag = true;
            for(int i = 1;i<=n;++i){
                st.push(i);
                if(st.size() > m){//如果此时栈中元素个数大于容量m,则序列非法
                    flag = false;
                    break;
                }
                //栈顶元素与出栈序列当前位置的元素相同时
                while(!st.empty() && st.top() == arr[current]){
                    st.pop();
                    current++;
                }
            }
            if(st.empty() == true && flag == true){
                printf("YES
    ");
            }else{
                printf("NO
    ");
            }
        }
        system("pause");
        return 0;
    } 
  • 相关阅读:
    Session 机制和 Cookie 机制
    Servlet The Request
    Servlet The Filter
    Servlet Context
    Python进程间通信和网络基础
    python 基础网络编程2
    python 基础网络编程1
    Mybatis Cache 缓存策略
    UIPickView之自定义生日键盘和城市键盘
    通过自定义window来实现提示框效果
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12207912.html
Copyright © 2011-2022 走看看