1051 Pop Sequence

原创 2015年11月21日 15:54:20

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--){
			//定义一个空栈 add是模拟栈压入的时候的数 flag用来标记是否可行
			stack<int>sta;
			int flag = 1;
			int add = 1;
			for(int i = 0; i < n;i++){
				int num;
				scanf("%d",&num);
				if(flag){
					//当栈为空栈或者说是栈的元素还不等于读取的数字的时候,一直对栈进行push操作,中间判断栈容量是否超过
					while(sta.size() == 0 || sta.top() != num){
						sta.push(add);
						if(sta.size() > m){
							flag = 0;
							break;
						}
						add++;
					}
					if(flag && sta.size() >= 1 && sta.top() == num){
						sta.pop();
					}
				}
			}
			if(flag){
				printf("YES\n");
			}else{
				printf("NO\n");
			}
		}
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

1051. Pop Sequence (25)

考察数据结构Stack的push跟pop操作  题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1051 #include #include ...

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...
  • LchinaM
  • LchinaM
  • 2015年03月06日 12:03
  • 467

1051. Pop Sequence (25)

题目如下: Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3,...

1051. Pop Sequence (25)

堆栈有M个容量(后进先出),现在有M个数,判断的有K组 看是否可以把1~M 这些数通过入栈后出来得到某组,可以YES,反之NO。 这里一开始我弄错了,每个数必须要入栈再出来,比如最后一组数据, 当1...

PAT-A-1051 Pop Sequence 【栈】

1051. Pop Sequence (25)Given a stack which can keep M numbers at most. Push N numbers in the order o...

02-线性结构4 Pop Sequence (25分)

Given a stack which can keep MM numbers at most. Push NN numbers in the order of 1, 2, 3, …, NN and ...

02-线性结构4 Pop Sequence (25分)

Given a stack which can keep MMM numbers at most. Push NNN numbers in the order of 1, 2, 3, …, NNN a...

Pop Sequence

02-线性结构4 Pop Sequence   (25分) Given a stack which can keep MMM numbers at most. Push NNN nu...
  • ccDLlyy
  • ccDLlyy
  • 2016年09月25日 09:34
  • 2122

[PTA]02-线性结构4 Pop Sequence

Given a stack which can keep MM numbers at most. Push NN numbers in the order of 1, 2, 3, ..., N...

PAT Perfect Sequence (25)

题目描述 Given a sequence of positive integers and another positive integer p. The sequence is said to b...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1051 Pop Sequence
举报原因:
原因补充:

(最多只允许输入30个字)