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:

#include <bits/stdc++.h>
using namespace std;
int n,m,k,a[1001],b[1001];
stack<int> num; inline int solve(int now,int last) {
int lasts=last; //相当于标记哪些i用过
for(register int i=last;i<=now;i++) {
if(num.empty()) break; //如果为空直接跳出
if(num.top()==a[i]) { //相等就弹出栈,并标记当前i用过
lasts++;
num.pop();
}
else break; //因为是栈,所以不相等就跳出
}
return lasts;
} int main() {
scanf("%d%d%d",&m,&n,&k);
for(register int i=1;i<=k;i++) {
int start=1;
bool p=true; //标记是否size>m
for(register int j=1;j<=n;j++) {
scanf("%d",&a[j]); //输入一个就处理一个
num.push(j);
if(num.size()>m) p=false;
else start=solve(j,start);
}
//cout<<num.size()<<" ";
if(!num.empty()||p==false) puts("NO");
else puts("YES");
while(!num.empty()) num.pop(); //因为是多种操作,所以记得清空
}
return 0;
}

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

int main() {
scanf("%d",&n);
int start=1;
bool p=true;
for(register int j=1;j<=n;j++) {
scanf("%d",&a[j]);
num.push(j);
start=solve(j,start);
}
if(!num.empty()||p==false) puts("NO");
else puts("YES");
return 0;
}

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. 蓝桥杯 算法提高 11-1实现strcmp函数 (JAVA方法)

    蓝桥杯 算法提高 11-1实现strcmp函数 (JAVA方法) 首先这不是一个多难的题,但是网上的我没怎么找到有Java的代码,基本全都是c语言的,小编是个小白,如果有不对的地方请联系小编 问题描述 ...

  2. Java实现 蓝桥杯VIP 基础练习 分解质因数

    题目介绍 问题描述 求出区间[a,b]中所有整数的质因数分解. 输入格式 输入两个整数a,b. 输出格式 每行输出一个数的分解,形如k=a1a2a3-(a1<=a2<=a3-,k也是从小到 ...

  3. Java实现 LeetCode 390 消除游戏

    390. 消除游戏 给定一个从1 到 n 排序的整数列表. 首先,从左到右,从第一个数字开始,每隔一个数字进行删除,直到列表的末尾. 第二步,在剩下的数字中,从右到左,从倒数第一个数字开始,每隔一个数 ...

  4. 第九届蓝桥杯JavaC组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.哪天返回 题目描述 小明被不明势力劫持.后被扔到x星站再无问津.小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文. ...

  5. 本地存储 localStorage

    本地存储localStorage 概念:window对象下面的属性,html5新增的,将5M大小的数据存储本地的浏览器上面. 浏览器支持存储5M大小 本地存储localStorage特点 本地存储属于 ...

  6. opencl(6)读写传输命令、内存映射命令

    1:将缓存对象的内容读到缓存对象中(从设备到主机) cl_int clEnqueuReadBuffer( cl_command_queue command_queue, //命令队列 cl_mem b ...

  7. python—列表,元组,字典

    ——列表:(中括号括起来:逗号分隔每个元素:列表中的元素可以是数字,字符串,列表,布尔值等等) (列表元素可以被修改)  list(类)    (有序的) [1]索引取值:切片取值:for循环:whi ...

  8. arduino 的analogRead() 和analogWrite()

    模拟输入analogRead()函数的返回值范围是0 到1023; 而模拟输出analogWrite()函数的输出值范围是0 到255; 所以: val = analogRead(potpin); / ...

  9. 菜鸟教程—SQL测验

    SQL 测验 结果:17/3 1. SQL 指的是? 你的回答: Structured Question Language 回答错误! 正确答案:Structured Query Language 2 ...

  10. kali系统安装google拼音

    1.设置多线程下载 /bin/bash -c "$(curl -sL https://git.io/vokNn)" 2.打开终端,输入下面的命令 apt-fast install ...