浙大数据结构慕课课后题(02-线性结构4 Pop Sequence)

题目要求:

给定一个可以保持的堆栈M最多数字。推N1、2、3、...,N并随机弹出。您应该判断给定的数字序列是否是堆栈的可能的弹出序列。例如,如果M是 5 和N是 7,我们可以从堆栈中得到 1、2、3、4、5、6、7,但不能得到 3、2、1、7、5、6、4。

输入规格:

每个输入文件都包含一个测试用例。对于每种情况,第一行包含 3 个数字(均不超过 1000):M(堆栈的最大容量),N(推送序列的长度),以及K(要检查的 pop 序列数)。然后K接下来是几行,每行都包含一个N数字。一行中的所有数字都用空格分隔。

输出规格:

对于每个弹出序列,如果它确实是堆栈的可能弹出序列,则在一行中打印"YES",如果不是,则打印"NO"

示例输入:

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

示例输出:

YES

NO

NO

YES

NO

题解:

思路如注释所示,可通过所有测试点。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int M,N,K;
    cin>>M>>N>>K;
    int stack[M+5] = {0};
    int check[N+5] = {0};
    while(K--){
        int top=-1;
        for(int i=1;i<=N;i++) cin>>check[i];

        for(int i=1,j=1;i<=N;i++){
            stack[++top] = i;  //依次进栈
            if(top==M) break;  //栈已经存储满,仍然没有遇见该弹出的元素
            while(top!=-1&&stack[top] == check[j]){
                top--;
                j++;
            }
        }

        if(top == -1) cout<<"YES\n";
        else cout<<"NO\n";
    }
    return 0;
}
相关推荐
晓觉儿31 分钟前
【GPLT】2026年第十一届团队程序设计天梯赛赛后题解(已写2h,存档中)
数据结构·c++·算法·深度优先·图论
流年如夢2 小时前
自定义类型进阶:联合与枚举
java·c语言·开发语言·数据结构·数据库·c++·算法
葳_人生_蕤2 小时前
hot100——图
数据结构·算法
图码3 小时前
递归入门:从n到1的优雅打印之旅
数据结构·c++·算法·青少年编程·java-ee·逻辑回归·python3.11
大肥羊学校懒羊羊3 小时前
题解:计算约数个数
数据结构·c++·算法
良木生香4 小时前
【C++初阶】:STL——String从入门到应用完全指南(3)
c语言·开发语言·数据结构·c++·算法
qyzm4 小时前
Educational Codeforces Round 189 (Rated for Div. 2)
数据结构·python·算法
北顾笙9804 小时前
day28-数据结构力扣
数据结构·算法·leetcode
我是无敌小恐龙5 小时前
Java SE 零基础入门Day03 数组核心详解(定义+内存+遍历+算法+实战案例)
java·开发语言·数据结构·人工智能·算法·aigc·动态规划
旖-旎5 小时前
深搜(二叉树剪枝)(3)
数据结构·c++·算法·力扣·剪枝·递归