Pop Sequence(PAT)

https://www.nowcoder.com/pat/5/problem/4090

前言:

PAT上一道Stack的应用题,简化版的有《信息学一本通·普及篇》的车厢调度

题目简述:

输入依次给定三个不大于1000的整数:m,n,k

其中m是栈的最大长度,有n个元素,进行k种出栈猜测

以下k行,输入出栈猜测,针对每种猜测,判断是否可行,可行则输出“YES”,反之输出“NO”


思路:

将每次给定的出栈猜测当做数组a,然后将元素从1-n依次进行入栈再进行solve处理。

处理规则:

(1)、设数组当前下标为now。从a[1]-a[now]判断a[i]是否等于栈顶元素,如果有,则弹出当前元素,并将a[i]标记为用过;如果不等于,则跳出循环不考虑后面的a[i](联系栈的特征“后进先出”——上面出去下面才能出去,便于理解)

(2)、如果当前栈的size超过了m,则说明栈满了,直接打标记最后输出“NO”

(3)、所有solve处理完后,判断当前栈是否为空,如果为空则说明第i种出栈猜测(1<=i<=k)正确,输出“YES”;如果不为空则说明不正确,输出“NO”

因为感觉自己没有讲得很清楚,现在给出草图帮助大家理解(如果还不是很清楚,可以结合代码哦qwq)


代码Code:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n,m,k,a[1001],b[1001];
  4. stack<int> num;
  5. inline int solve(int now,int last) {
  6. int lasts=last; //相当于标记哪些i用过
  7. for(register int i=last;i<=now;i++) {
  8. if(num.empty()) break; //如果为空直接跳出
  9. if(num.top()==a[i]) { //相等就弹出栈,并标记当前i用过
  10. lasts++;
  11. num.pop();
  12. }
  13. else break; //因为是栈,所以不相等就跳出
  14. }
  15. return lasts;
  16. }
  17. int main() {
  18. scanf("%d%d%d",&m,&n,&k);
  19. for(register int i=1;i<=k;i++) {
  20. int start=1;
  21. bool p=true; //标记是否size>m
  22. for(register int j=1;j<=n;j++) {
  23. scanf("%d",&a[j]); //输入一个就处理一个
  24. num.push(j);
  25. if(num.size()>m) p=false;
  26. else start=solve(j,start);
  27. }
  28. //cout<<num.size()<<" ";
  29. if(!num.empty()||p==false) puts("NO");
  30. else puts("YES");
  31. while(!num.empty()) num.pop(); //因为是多种操作,所以记得清空
  32. }
  33. return 0;
  34. }

再讲一下简化版的车厢调度吧,因为只有一种猜测,所以程序只需要主程序更改一点就可以A掉,主程序如下:

  1. int main() {
  2. scanf("%d",&n);
  3. int start=1;
  4. bool p=true;
  5. for(register int j=1;j<=n;j++) {
  6. scanf("%d",&a[j]);
  7. num.push(j);
  8. start=solve(j,start);
  9. }
  10. if(!num.empty()||p==false) puts("NO");
  11. else puts("YES");
  12. return 0;
  13. }

Pop Sequence 题解的更多相关文章

  1. PAT 甲级 1051 Pop Sequence (25 分)(模拟栈,较简单)

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

  2. 1051. Pop Sequence

    原题连接:https://www.patest.cn/contests/pat-a-practise/1051 题目: Given a stack which can keep M numbers a ...

  3. PAT 解题报告 1051. Pop Sequence (25)

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

  4. Pop Sequence

    题目来源:PTA02-线性结构3 Pop Sequence   (25分) Question:Given a stack which can keep M numbers at most. Push ...

  5. 02-线性结构3 Pop Sequence

    Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...

  6. Pop Sequence (栈)

     Pop Sequence (栈) Given a stack which can keep M numbers at most. Push N numbers in the order of 1, ...

  7. 数据结构练习 02-线性结构3. 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 p ...

  8. 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 ...

  9. PAT1051:Pop Sequence

    1051. Pop Sequence (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given a ...

随机推荐

  1. Java实现 LeetCode 528 按权重随机选择(TreeMap)

    528. 按权重随机选择 给定一个正整数数组 w ,其中 w[i] 代表位置 i 的权重,请写一个函数 pickIndex ,它可以随机地获取位置 i,选取位置 i 的概率与 w[i] 成正比. 说明 ...

  2. Java实现 LeetCode 475 供暖器

    475. 供暖器 冬季已经来临. 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖. 现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径. 所以,你的输入将会是房 ...

  3. Java实现 LeetCode 15 三数之和

    15. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以 ...

  4. Java实现 洛谷 P1115 最大子段和

    import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scann ...

  5. java实现立方和等式

    考虑方程式:a^3 + b^3 = c^3 + d^3 其中:"^"表示乘方.a.b.c.d是互不相同的小于30的正整数. 这个方程有很多解.比如: a = 1,b=12,c=9, ...

  6. iOS -实现UIView圆角显示的方法

    添加一个UIView时,默认直角显示有时对于有强迫症的患者还真有点不舒服! eg: 怎么实现UIview的圆角显示呢? 首先包含一个头文件: #import <QuartzCore/Quartz ...

  7. 【个人博客 hexo】一个小时就搭好属于自己的博客

    对于经常需要发博客的小伙伴来说,拥有一个属于自己的博客网站,听起来是不是很酷. 今天我就来告诉大家,怎么搭建一个属于自己的博客网站,我们需要的就是使用hexo+github来搭建我们自己博客系统. 你 ...

  8. <Win10开发>UWP使用.Net Native编译时遇到的一些问题。

    最近开始尝试把WP8.1 Runtime的项目升级成Win10 UWP,我用的方法没什么技巧性,就是直接复制文件和代码到新建的UWP项目.结果是后台代码未经修改,全部正常运行.但是UI控件的布局有些偏 ...

  9. Linux中tomcat的部署

    红帽7如何配置tomcat 1.下载tomcat9.0和java-1.8 tomcat的下载地址: https://tomcat.apache.org/ java1.8是radhat7自带: [roo ...

  10. 设计模式系列之工厂模式三兄弟(Factory Pattern)

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...