铁路的调度站如下:
火车编号为:1~n,且不重复。
如:编号分别为“1”、“2”、“3”、“4”、“5”的5个火车顺序进站,那么进站序列为“12345”,全部进站后再顺序出站,则出站序列为“54321”,如果先进1,2,然后2出站,然后1出站,然后再3进站、出站,4进站、出站,5进站、出站,那么出站序列就为21345.
输入:
5
5 4 3 2 1
5
5 4 1 2 3
输出:
yes
no
code
#include<iostream>
#include<stack>
using namespace std;
const int MAXN = 1010;
int n;
int target[MAXN];
int main() {
while (scanf_s("%d", &n) == 1) {
stack<int> s;
bool flag = 1;
int pA = 1;
int pB = 1;
for (int i = 1; i <= n; i++) {
scanf_s("%d", &target[i]);
}
while (pB <= n) {
if (pA == target[pB]) { // 优化,一进一出的情况
pA++;
pB++;
}else if (!s.empty() && s.top() == target[pB]) { // 栈非空且栈顶元素在B中顺序刚好
s.pop();
pB++;
}else if (pA <= n) { // 栈为空或栈顶元素顺序不对
s.push(pA);
pA++;
}else{ //全部入栈顺序还是不对
flag = 0;
break;
}
}
printf("%s\n", flag ? "yes" : "no");
}
return 0;
}