题目链接
https://vjudge.net/problem/UVA-514
题意:
有1~n共 n n n节车厢从A驶来,问能否按照特定顺序进入B,AB中间有一个先进后出的车站,车厢只能前进不能后退。
思路
用栈模拟一下就行了。
如果A车厢是B要求的,直接进入B,否则进入车站。
如果A没有车厢了,车站顶的车厢不满足要求,就不行。
AC代码
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <map>
using namespace std;
#define ll long long
const int maxn = 1010;
int a[maxn];
int main() {
// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
int n;
while(~scanf("%d", &n) && n) {
while(1) {
scanf("%d", &a[0]);
if(a[0] == 0) {
printf("\n");
break;
}
for(int i = 1; i < n; i++)
scanf("%d", &a[i]);
stack<int> s;
int cnt = 1, i = 0;
while(i < n) {
if(a[i] == cnt) {
i++;
cnt++;
}
else if(!s.empty() && a[i] == s.top()) {
i++;
s.pop();
}
else {
if(cnt <= n) {
s.push(cnt);
cnt++;
}
else
break;
}
}
if(i == n)
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}