1051. Pop Sequence
原题连接:https://www.patest.cn/contests/pat-a-practise/1051
题目:
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
这道题我参阅了 http://blog.csdn.net/whzyb1991/article/details/46663867 这篇博文的思路,稍有改动,并且我是用链式存储堆栈,而博文的作者是用顺序存储的方式,读者可以对比两种
方式的优缺点。
这道题并不是有多复杂,关键在于想出it is not a possible pop sequence of the stack的条件!我是苦于没有思路,才参阅了博主的文章。共勉!
我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define Max 1000
typedef struct SNode{
int Data;
struct SNode *Next;
}Stack; Stack *CreateStack()
{
Stack *Ptrs=(Stack*)malloc(sizeof(struct SNode));
Ptrs->Next=NULL;
return Ptrs;
} bool IsEmpty(Stack *Ptrs)
{
return(Ptrs->Next==NULL);
} void Push(Stack *Ptrs,int X)
{
Stack *S;
S=(Stack *)malloc(sizeof(struct SNode));
S->Data=X;
S->Next=Ptrs->Next;
Ptrs->Next=S;
} void Pop(Stack *Ptrs)
{
if(IsEmpty(Ptrs)) return;
Stack *FirstCell;
FirstCell=Ptrs->Next;
Ptrs->Next=FirstCell->Next;
free(FirstCell);
}
/* 计算堆栈的长度 */
int Length(Stack *Ptrs)
{
Stack *p;
p=Ptrs->Next;
int cnt =;
while(p)
{
cnt++;
p=p->Next;
}
return cnt;
}
/* 检验每一line是否符合要求 */
int check_stack(int *v,int N,int M)
{
int i=;
int num=;
Stack*ps;
ps=CreateStack();
Push(ps,); //先给栈中压入一个元素0
while(i<N) //审核每个已给元素
{ /* 核心 */ //入栈条件;当前栈顶元素小于已给数字,并且(前提条件)栈内元素的总容量小于栈的容量
while(ps->Next->Data<v[i] && Length(ps)<M+)
Push(ps,num++); //压入数num后,由于"the order is 1,2,……N。故下一个压入的数必为num+1;
if (ps->Next->Data==v[i])
{
Pop(ps); //栈顶元素出栈
i++; //之后的栈顶元素和下一个已给元素继续比较
}
else
{
free(ps);
return ;} //False!
}
free(ps);
return ; }
int main()
{
int M,N,K;
scanf("%d %d %d",&M,&N,&K); int *v=(int *)malloc(sizeof(int)*N);
int i,j;
for(i=;i<K;i++)
{
for (j=;j<N;j++)
{
scanf("%d",v+j);
}
if(check_stack(v,N,M))printf("YES\n");
else printf("NO\n");
}
free(v);
return ; }
1051. Pop Sequence的更多相关文章
- 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 ...
- PAT 1051 Pop Sequence[栈][难]
1051 Pop Sequence (25 分) Given a stack which can keep M numbers at most. Push N numbers in the order ...
- 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 ...
- PAT 1051 Pop Sequence (25 分)
返回 1051 Pop Sequence (25 分) Given a stack which can keep M numbers at most. Push N numbers in the ...
- 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 ...
- PAT 甲级 1051 Pop Sequence
https://pintia.cn/problem-sets/994805342720868352/problems/994805427332562944 Given a stack which ca ...
- 【PAT】1051 Pop Sequence (25)(25 分)
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...
- PAT Advanced 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 ...
- 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 p ...
随机推荐
- 我的CodeF水A题之路
Codeforces Round #359 (Div. 2) A. Free Ice Cream 题目链接:http://www.codeforces.com/problemset/problem/6 ...
- Java常用的技术网站
学习Java,我会去的网站: 1.开源项目网站:https://github.com/和http://www.codeproject.com/,可以在这里搜索到别人上传的一些代码和项目 2.咨询问题的 ...
- Qt5.5.1编译出来的程序出现libgcc_s_dw2-1.dll的解决方案
问题如图: 输入"myudp2016.exe 1 " 后出现 这是因为没有在系统环境变量path里加上相关路径,我们添加如下路径: 比如说WIN7系统-开始-计算机-右键-属性- ...
- 常用类string的用法
在Java中string是我们用的很多的一种类,下面就来说说string类中经常用到的一些方法. 1.string与数组相关的方法: 比如:string str = "fsafdsafdas ...
- html5 Application Cache 机制以及使用
那什么是Application Cache呢? 顾名思义,AppCache就是对app内存缓存的方案,具体表现为当请求某个文件时不是从网络获取该文件,而是从本地内存中获取. Application C ...
- 处理Https 异常记录 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
http://blog.csdn.net/baidu_18607183/article/details/51595330 https://blogs.oracle.com/java-platform- ...
- Mac php使用gd库出错 Call to undefined function imagettftext()
第一次在Mac下使用ThinkPHP,用到验证码功能时报如题的错误: Call to undefined function Think\imagettftext() 然后检查自己的GD库,发现安装上了 ...
- 如何获取苹果手机的UDID
获取苹果手机的UDID有很多种,比如Xcode,iTunes等等吧,个人比较推荐使用iTunes,因为比较官方,而且苹果电脑自带的有,而且Windows也可以下载安装. 1.下载安装itunes(点击 ...
- python中的正则表达式
- Windows平台下和跨平台的相关公共库
以下主要包含windows下公共库以及跨平台公共库: 1. google base库:google下chromium项目的跨平台公共库: 2. vc_common_src:即HP_SOCKET项目中的 ...