问题描述:
已知自然数1,2,…,N(1≤N≤10000)依次入栈(即a<b当且仅当a先于b入栈),请设计算法判断输入序列C1,C2,…,CN是否为可能的出栈序列。
例如:N=5 时,3,4,2,1,5是一个可能的出栈序列,因为其可以按如下操作获得:
push 1, push 2, push 3, pop, push 4, pop, pop, pop, push 5, pop
输入:可包含多个测试用例,每个测试用例的输入有两行:
第一行是要判断序列的长度(即元素个数)N,(1≤N≤10000);
第二行是以N个正整数表示的出栈序列,以空格隔开;
如果序列长度为0,则结束;
输出:
先输出要判断的序列,然后输出判断结论,如给出的序列是可能的出栈序列,则输出"Yes!",否则输出"No!"。
例如
输入:
5
3 4 2 1 5
5
3 5 1 4 2
0
输出:
3 4 2 1 5: Yes!
3 5 1 4 2: No!
思路:
见代码
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;