您的位置:首页 > 文旅 > 旅游 > 浙大数据结构慕课课后题(02-线性结构4 Pop Sequence)

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

2024/10/6 8:33:29 来源:https://blog.csdn.net/Charon_super/article/details/141033831  浏览:    关键词:浙大数据结构慕课课后题(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

题解: 

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

#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;
}

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com