# 1051 Pop Sequence

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解题思路：	用栈来模拟整个过程的压入弹出，每次读入一个数字的时候，说明这个数字之前的数字都已经被压入过栈中了，要不是在栈中，要不就是压入栈后已经被弹出了。所以对于读取的第一个数，因为是第一个数，所以说明这个数之前的数字都没有被pop过。声明一个空栈，这个空栈从压入1开始，依次递增，直到压入的数和读取的第一个数相等，说明这个时候需要对栈进行pop操作，依次对读取的第二，第三。。。第n个数进行模拟。在模拟的过程中要判断，这个栈中的数据是否已经超过了栈的容量m如果已经超过了m那个就没有继续进行模拟的必要了。#include<iostream>
#include<stack>
#include<stdio.h>
using namespace std;
int main(){
for(int m,n,k;scanf("%d%d%d",&m,&n,&k)!= EOF;){
while(k--){
stack<int>sta;
int flag = 1;
for(int i = 0; i < n;i++){
int num;
scanf("%d",&num);
if(flag){
//当栈为空栈或者说是栈的元素还不等于读取的数字的时候，一直对栈进行push操作，中间判断栈容量是否超过
while(sta.size() == 0 || sta.top() != num){
if(sta.size() > m){
flag = 0;
break;
}
}
if(flag && sta.size() >= 1 && sta.top() == num){
sta.pop();
}
}
}
if(flag){
printf("YES\n");
}else{
printf("NO\n");
}
}
}
return 0;
}

• 本文已收录于以下专栏：

Pat1051代码 题目描述：

## PAT 1051. Pop Sequence (25)

1051. Pop Sequence (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B ...

## PAT A1051. 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...

## 1051.Pop Sequence

【题意】         对于最大深度给定的栈，判断几个序列是否可能为入栈顺序为1到n的序列对应的出栈序列 【思路】         1.    对于出栈序列中的任一个数，在它后面出栈的...

## 1051. 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...

## PAT 1051. Pop Sequence (25)

//1051. Pop Sequence (25) //一定记得进行完之后要将所有的元素都pop出来才能得到正确结果。 //acc #include #include using namespac...

举报原因： 您举报文章：深度学习：神经网络中的前向传播和反向传播算法推导 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)