1051.Pop Sequence
2015-01-19 23:48
501 查看
【题意】
对于最大深度给定的栈,判断几个序列是否可能为入栈顺序为1到n的序列对应的出栈序列
【思路】
1. 对于出栈序列中的任一个数,在它后面出栈的比它小的数必定是按照递减顺序出栈的。从后往前计算出每个位置对应的递减序列长度是否超出栈的容量,并判断是否比自己小的数不构成递减序列,如此便可判断出栈序列是否可行;
2. AC了以后看了看网上别人的做法,发现其实可以直接用进栈、出栈模拟
对于最大深度给定的栈,判断几个序列是否可能为入栈顺序为1到n的序列对应的出栈序列
【思路】
1. 对于出栈序列中的任一个数,在它后面出栈的比它小的数必定是按照递减顺序出栈的。从后往前计算出每个位置对应的递减序列长度是否超出栈的容量,并判断是否比自己小的数不构成递减序列,如此便可判断出栈序列是否可行;
2. AC了以后看了看网上别人的做法,发现其实可以直接用进栈、出栈模拟
#include <iostream> #include <vector> using namespace std; int main(int argc, char const *argv[]) { int m,n,k; cin >> m >> n >> k; for(int i=0; i<k; i++){ vector<int> depth; vector<int> seq; depth.resize(n); seq.resize(n); for(int j=0; j<n; j++){ cin >> seq[j]; } bool flag = true; for(int j=n-1; j>=0; j--){ depth[j] = 1; int min = 0; for(int p=n-1; p>j; p--){ if(seq[p]<seq[j]){ if(seq[p]>min){ min = seq[p]; depth[j]++; } else{ flag = false; break; } } if(depth[j]>m){ flag = false; break; } } if(!flag){ break; } } if(flag){ cout << "YES" << endl; } else{ cout << "NO" << endl; } } system("pause"); return 0; }
相关文章推荐
- pat 1051 Pop Sequence 解法2
- 1051.Pop Sequence (25) PAT甲级刷题
- 1051. Pop Sequence
- 解题报告-PAT-Pop Sequence 浙大1051
- PAT甲级真题及训练集(6)--1051. Pop Sequence (25)
- 1051 Pop Sequence
- 1051. Pop Sequence
- 1051. Pop Sequence (25)
- 1051. Pop Sequence (25)
- 1051. Pop Sequence
- 1051.Pop Sequence (25)
- 1051. Pop Sequence (25)
- PAT 1051 pop Sequence
- 1051. Pop Sequence (25)
- PAT (Advanced Level) Practise 1051 Pop Sequence (25)
- 1051. Pop Sequence (25)
- PAT1051:Pop Sequence
- 1051. Pop Sequence (25)
- PAT 1051 Pop Sequence
- 1051.Pop Sequence