解题报告-PAT-Pop Sequence 浙大1051
2016-10-12 09:18
621 查看
# include <stdio.h> # include <stdlib.h> # include <string.h> # include <algorithm> # include <iostream> # include <stack> const int MAX_SIZE = 1000+10; using namespace std; stack<int >s; int se[MAX_SIZE]; /* 5 7 2 1 7 6 5 4 3 2 5 6 4 3 7 2 1 */ /* 问题描述: 给定一个可以容纳M个元素的栈,给定N,以1.2.3.4...N的次序进栈,出栈次序不定,问能否得到 给定的出栈序列。如果能得到,则输出YES,不能得到输出NO。 输入M,N,K。K是测试序列的个数 样例输入: 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 算法思想: 对于给定的序列,5 6 4 3 7 2 1 判断是否是合法的出栈序列,申请指针p,用p依次指向序列每一个数;申请 指针f,记录已经入栈的最大N值,即记录1.2.3.4.5.6.7中入栈的最大N值,因为在入栈的过程中可能会夹杂着出栈, 栈顶元素肯定不是最大的,需要f记录。这样是为了下一次遇到 s.top() < p 需要从f+1开始到p,依次将数压入栈中。 如果 s.top() == p,则栈顶元素出栈,顺序比较下一个数。如果s.top() > p,则序列不合法。 中间如果遇到s.size() > M 的情况,则也要退出。 */ int main(){ int m,n,k; cin >> m >> n >> k; int p,ok,f; while(k--){ //输入 for(int i=0;i<n;i++){ cin>>se[i]; } //初始化 ok = 1; f = 0; while(!s.empty()) s.pop(); //根据序列依次判断 for(int j=0; j < n; ){ p=se[j]; //当前判断到的数字 if(s.empty() || s.top() < p){//如果栈空就不会执行s.top() for(int t = f+1; t <= p; t++){ s.push(t); if(f<s.top()) f=s.top(); } } if(s.top() > p){ //s.top() > p一定要放在等于p之前,因为如果栈空,s.top()取不到。 ok=0; break; //但是在中间,就保证了栈不为空。 } if(s.top() == p){ if(s.size() > m){ ok=0;//出栈之前判断size,入栈也可以判断,但是跳不出两层循环。 break; } if(f < s.top()) f = s.top(); s.pop(); j++; } }//for if(!ok) printf("NO\n"); else printf("YES\n"); } return 0; }
相关文章推荐
- 1051. Pop Sequence (25)解题报告
- 【解题报告】【浙大PAT】1051. Pop Sequence (25)
- PAT - 甲级 - 1051. Pop Sequence (25)(模拟)
- ZJU-PAT 1051 Pop Sequence
- PAT 1051 Pop Sequence
- PAT甲级真题及训练集(6)--1051. Pop Sequence (25)
- PAT1051:Pop Sequence
- PAT 解题报告 1051. Pop Sequence (25)
- Pat(Advanced Level)Practice--1051(Pop Sequence)
- 浙大PAT_1044:Shopping in Mars 解题报告
- pat 1051 Pop Sequence 解法2
- 浙大PAT 1051题 1051. Pop Sequence
- PAT 1051 pop Sequence
- 浙大PAT_1038:Recover the Smallest Number 解题报告
- PAT (Advanced Level) Practise 1051 Pop Sequence (25)
- PAT (Advanced Level) Practise 1051 Pop Sequence (25)
- PAT-A-1051 Pop Sequence 【栈】
- 【解题报告】【浙大PAT】03-树1. List Leaves (25)
- 浙大PAT 1006. 换个格式输出整数 (解题报告)
- 浙大PAT 1019. 数字黑洞 (解题报告)