首页 > 代码库 > UVA514 - Rails(栈)

UVA514 - Rails(栈)

题目:UVA514 - Rails(栈)


题目大意:某城市有一个火车站,铁轨成Y字形,有n节车厢从A方向驶入车站,按进站顺序编号1-n,现在给你一个序列代表进入B的顺序,你可以借助一个C中转站,问能否可以按这样的序列驶入B。


解题思路:栈模拟,中转站就代表栈,将车厢入栈后,只能从栈顶一个一个出去。注意输出每个cas都有一个空行。


代码:

#include <cstdio>
#include <cstring>
#include <stack>

using namespace std;

const int N = 1005;
int tail[N], n;

stack<int> s;

bool ok () {

	while (!s.empty()) {
		s.pop();
	}
	
	int k = 1;
	int p = 0;
	while (k <= n && p < n) {

		if (k == tail[p]) {
			p++;
			k++;
		} else if (!s.empty() && s.top() == tail[p]) {
			s.pop();
			p++;
		} else {
			s.push (k);
			k++;
		}
	}

	while (!s.empty() && p < n) {

		if (s.top() == tail[p]) {
			s.pop();
			p++;
		} else
			break;
	}

	if (p == n)
		return true;
	return false;

}

int main () {

	bool flag;
	while (scanf ("%d", &n) && n) {

		flag = 1;
		while (1) {

			for (int i = 0; i < n; i++) {
				scanf ("%d", &tail[i]);
				if (!tail[i]) {
					flag = 0;
					break;
				}
			}

			if (!flag)
				break;
			
			printf ("%s\n", ok() ? "Yes": "No");	
		}
		printf ("\n");
	}
	return 0;
}


UVA514 - Rails(栈)