problem

1051 Pop Sequence (25分)
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, …, N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is 5 and N is 7, we can obtain 1, 2, 3, 4, 5, 6, 7 from the stack, but not 3, 2, 1, 7, 5, 6, 4.

Input Specification:
Each input file contains one test case. For each case, the first line contains 3 numbers (all no more than 1000): M (the maximum capacity of the stack), N (the length of push sequence), and K (the number of pop sequences to be checked). Then K lines follow, each contains a pop sequence of N numbers. All the numbers in a line are separated by a space.

Output Specification:
For each pop sequence, print in one line “YES” if it is indeed a possible pop sequence of the stack, or “NO” if not.

Sample Input:
5 7 5
1 2 3 4 5 6 7
3 2 1 7 5 6 4
7 6 5 4 3 2 1
5 6 4 3 7 2 1
1 7 6 5 4 3 2
Sample Output:
YES
NO
NO
YES
NO

  • 给定一个大小为n的栈,按照1,2,3,…n的顺序依次入栈
  • 给出k个长为m的出栈序列,判断是否合法

solution

直观的思路就是将入栈序列一个一个入栈,与出栈序列相比较,一样就出栈,不一样就继续入栈,当入栈序列和出栈序列都为空时,表示出栈顺序合法。

建立一个辅助栈 把输入的第一个序列中的数字一个一个压入该辅助栈,并按照第二个序列的顺序从该栈中弹出数字。
(1)如果元素是栈顶的元素,则pop出来;
(2)如果不是栈顶元素,则根据入栈顺序将没入栈的元素push进栈,直到将该元素push栈中,然后将该元素pop出来;如果push完所有元素都没有找到该元素,那么这个出栈顺序是错误的。最后辅助栈为空栈,并且遍历完了出栈序列的最后一个元素(二者缺一不可),那么该序列就是 一个弹出序列

#include<iostream>
#include<stack>
using namespace std;
int a[1010];int main(){int n, m, k;cin>>n>>m>>k;while(k--){for(int i = 1; i <= m; i++)cin>>a[i];int ok = 1, cur = 0;stack<int>s;for(int i = 1; i <= m; i++){if(s.empty())s.push(++cur);while(s.top()!=a[i]&&s.size()<=n)s.push(++cur);if(s.size()>n){ok = 0; break;}if(s.top()==a[i]){s.pop(); continue;}else{ok = 0; break;}}if(ok==1&&s.size()==0){cout<<"YES\n";}else{cout<<"NO\n";}}return 0;
}

【PAT甲】1051 Pop Sequence (25分)判断出栈顺序的合法性相关推荐

  1. 【PAT (Advanced Level) Practice】1051 Pop Sequence (25 分)

    1051 Pop Sequence (25 分) Given a stack which can keep M numbers at most. Push N numbers in the order ...

  2. 判断出栈顺序的合法性(面试题)

    判断出栈顺序的合法性 "栈"是一种限制性线性表,是将线性表的插入.删除操作限制为仅在表的一端进行,一般将能够插入.删除的一端称为栈顶,表的另一端称为栈底.当栈中没有元素时称为空栈. ...

  3. PAT甲级1051 Pop Sequence:[C++题解]模拟栈、判断序列是否是合法的出栈序列

    文章目录 题目分析 题目来源 题目分析 来源:acwing 分析: 题意:将1~N压栈,判断给定序列是否是合法的出栈序列. 对于序列1~N中的每个值i,先将其压入栈.然后对于它就有两种处理方法:要么压 ...

  4. 【详细注释】1051 Pop Sequence (25 分)

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 Given a stack which can keep M numbers at most. Push N numbers in ...

  5. 根据入栈顺序判断出栈顺序的合法性

    这道题不管是面试还是笔试的选择题都非常爱出的一道题 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4 ...

  6. 【PAT甲级 stack queue的使用】1051 Pop Sequence (25 分) C++ 全部AC

    题目 思路 维护三个集合:核心栈.数字队列.目标队列 详细思路见注释 题解 C++ #include<iostream> #include<stack> #include< ...

  7. java判断出栈顺序,java判断出栈顺序是否正确

    java判断出栈顺序是否正确 我们知道栈是一种先进后出的数据容器.当一个栈的输入序列是递增序列(例如a,b,c,d),并且在进栈操作时,允许退栈操作,则输出的序列可能有多种形式(例如:d,c,b,a或 ...

  8. 判断出栈顺序是否正确

    先说一下题目: 假设有一个栈S,每次我们可以把序列A(含N个元素)中的第一个元素移入栈S,也可以是从栈顶弹出一个元素放入出栈序列B.这 样,经过N次入栈和出栈操作后,我们可以得到一个出栈序列B. 现在 ...

  9. 判断出栈顺序合法性的两种方法

    文章目录 今天偶然看到一个面试题, 题目是这样的: 给我们两个序列,第一个序列表示栈的压入顺序,然后让判断第二个序列是不是是否是该栈的弹出序列 现设第一个序列为[1,2,3,4,5],第二个序列为[3 ...

最新文章

  1. Python基础学习!容器:列表,元组,字典与集合!(1)
  2. Java JDBC连接oracle、SQL server、My Sql数据库的驱动
  3. ssh中添加隧道,访问目标机器上的地址
  4. Java 静态导入 、可变参数
  5. 三张表有重复字段_什么?搞不定Kafka重复消费?
  6. Linux用命令获取广域网(公网)IP地址
  7. 常见的问题:https://localhost:1158/em 无法打开
  8. 腾讯股价创新高:总裁刘炽平减持40万股 套现2.5亿港元
  9. 揭开PC-Lint9的神秘面纱
  10. springboot获取active_springboot 2.3.0+activeRecord获取对象报类型转换错误
  11. Python爬虫批量下载PDF文档
  12. OS_windows_性能监视器资源监视器任务管理器:指标阅读与使用/关闭/调整虚拟内存/android内存调度
  13. HGHAC已保留的连接位置为执行非复制请求的超级用户预留
  14. 计算机的桌面窗口有哪几部分,电脑窗口有哪几部分组成
  15. JAVA图灵 自动回复_实现微信公众号聊天机器人,自动回复——nodejs+图灵机器人...
  16. 【Sass/SCSS】预加载器中的“轩辕剑”
  17. Windows下安装Oracle数据库及遇到的问题解决方法(找不到WFMLRSVCApp.ear文件)
  18. CleanCode-函数
  19. Python 从入门到放弃(三)
  20. 三层交换机实现 VLAN 间通信

热门文章

  1. windows 的使用 —— 注册表(软件的安装和卸载)
  2. 算法问题的求解 —— 变量的引入
  3. 机器学习基础(四十三)—— kd 树( k 近邻法的实现)
  4. 计算机应用技术教程的答案,大学计算机应用技术教程答案
  5. python语言入门t_Python基础学习
  6. 苹果x来电闪光灯怎么设置_苹果6splus来电没有声音,苹果6sp听筒没有声音怎么回事...
  7. python编程软件哪个好-有哪些值得推荐的 Python 开发工具?
  8. micropython入门教程-【chocho教程】micropython入门教程一
  9. python官网的软件-python软件怎么用
  10. 语音识别揭秘:你的手机究竟有多理解你?