题目大意:有一列n节车厢的火车要入栈,车厢从1到n,只能从小到大入栈。
现在给出一个出栈顺序,问能否实现
解题思路:如果栈顶元素大于要出栈的数,肯定就不能实现了。
如果栈顶元素小于要出栈的数,就继续入栈
如果栈定元素等于要出栈的数,就出栈
#include<cstdio>
#include<algorithm>
#include<stack>
using namespace std;
#define maxn 1010
int num[maxn], n;
void solve() {
bool flag = true;
int cnt = 2;
stack<int> S;
S.push(1);
for(int i = 0; i < n; i++) {
if(S.empty()) {
if(cnt == n + 1) {
flag = false;
break;
}
S.push(cnt);
cnt++;
}
if(num[i] > S.top()) {
S.push(cnt);
cnt++;
i--;
}
else if(num[i] == S.top()){
S.pop();
}
else {
flag = false;
break;
}
}
if(!flag)
printf("No\n");
else
printf("Yes\n");
}
int main() {
while(scanf("%d", &n) == 1 && n) {
int t, x;
while(1){
scanf("%d", &num[0]);
if(!num[0])
break;
for(int i = 1; i < n; i++)
scanf("%d", &num[i]);
solve();
}
printf("\n");
}
return 0;
}