您的位置:首页 > 产品设计 > UI/UE

1051.Pop Sequence

2015-01-19 23:48 501 查看
【题意】
对于最大深度给定的栈,判断几个序列是否可能为入栈顺序为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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: