2、铁轨 (栈)

铁路的调度站如下:

火车编号为: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;
}

猜你喜欢

转载自blog.csdn.net/kirito0104/article/details/81149784