题目链接:http://www.patest.cn/submissions/3367339
题目大意:
入栈的顺序为1,2,3…,N;判断给定的出栈序列是否为合理的出栈序列。
解题思路:
模拟出栈入栈的方法。扫描待判定序列,栈顶不等于当前扫描元素且栈不溢出时执行入栈操作;栈顶等于扫描元素时执行出栈操作。最终判断序列中的元素是否全被扫描,若是则证明是合理的出栈序列。
代码如下:
#include <iostream>
#include <stack>
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++){
stack<int> s;
int A[n];
for(int j=0;j<n;j++)
cin>>A[j];
int index=0;
for(int j=0;j<n;j++){
s.push(j+1);
if(s.size()>m)//超出栈的大小
break;
while(!s.empty()&&s.top()==A[index]){//栈非空且当前栈顶等于当前出栈序列中的元素,
s.pop();//则出栈
index++;//序列下标前移
}
}
if(index==n)//给定出栈序列全部都模拟完
index<<"YES"<<endl;//该序列为合理的出栈序列
else
index<<"NO"<<endl;
}
return 0;
}
结果: