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;
}
时间: 2024-11-08 19:00:20

UVA514 - Rails(栈)的相关文章

UVa514 Rails (栈)

链接:http://acm.hust.edu.cn/vjudge/problem/19641分析:车厢符合后进先出的原则,因此是一个栈. 1 #include <cstdio> 2 #include <stack> 3 using namespace std; 4 5 const int maxn = 1000 + 10; 6 7 int n, target[maxn]; 8 9 int main() { 10 while (scanf("%d", &n

UVa514 Rails(铁轨)

UVa514 Rails(铁轨) 题目:铁轨 题目链接:UVa514链接 题目描述: 某城市有一个火车站,有n节车厢从A方向驶入车站,按进站的顺序编号为1-n.你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶入车站.例如,出栈顺序(5 4 1 2 3)是不可能的,但是(5 4 3 2 1)是可能的. 题目分析: 为了重组车厢,借助中转站,对于每个车厢,一旦从A移入C就不能回到A了,一旦从C移入B,就不能回到C了,意思就是A->C和C->B.而且在中转站C中,车厢符合后进先出的原

YTU 1011 Rails 栈

1011: Rails Time Limit: 1000 Sec  Memory Limit: 64 MB Submit: 11  Solved: 6 [Submit][Status][Web Board] Description There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Unfortuna

poj1363 Rails(栈模拟)

D - Rails Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1363 Appoint description: System Crawler (2016-05-09) Description There is a famous railway stati

UVA514 Rails(stack)

opPush城市有一座著名的火车站.这个国家到处都是丘陵.而这个火车站是建于上一个世纪.不幸的是,那时的资金有限.所以只能建立起一条路面铁轨.而且,这导致这个火车站在同一个时刻只能一个轨道投入使用,因为它缺少空间,两列火车将无路可走.具体看下图. 当地的惯例是每一列火车从A方向驶向B方向时候,会用某种方式将车厢重组.假设火车将要到达A方向,拥有N个车厢(N<=1000),这些车厢按照递增顺序标记为1到N.负责从组车厢的领导,必须知道是否能从组车厢让它驶出B,而这个重组的序列就是a1\a2\a3.

UVA514 Rails

 铁轨 PopPush城市有一座著名的火车站.这个国家到处都是丘陵.而这个火车站是建于上一个世纪.不幸的是,那时的资金有限.所以只能建立起一条路面铁轨.而且,这导致这个火车站在同一个时刻只能一个轨道投入使用,因为它缺少空间,两列火车将无路可走.具体看下图. 当地的惯例是每一列火车从A方向驶向B方向时候,会用某种方式将车厢重组.假设火车将要到达A方向,拥有N个车厢(N<=1000),这些车厢按照递增顺序标记为1到N.负责从组车厢的领导,必须知道是否能从组车厢让它驶出B,而这个重组的序列就是a1\a

【UVa-514】铁轨——栈的学习

UVa514 Rails(铁轨) 题目:铁轨 题目链接: UVa514链接 题目描述: 某城市有一个火车站,有n节车厢从A方向驶入车站,按进站的顺序编号为1-n.你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶入车站.例如,出栈顺序(5 4 1 2 3)是不可能的,但是(5 4 3 2 1)是可能的. 题目分析: 为了重组车厢,借助中转站,对于每个车厢,一旦从A移入C就不能回到A了,一旦从C移入B,就不能回到C了,意思就是A->C和C->B.而且在中转站C中,车厢符合后进先出的

514 - Rails

Rails PS:因为该题排版较麻烦,这里给出OJ网址:UVa514 - Rails 某城市有一个火车站,铁轨铺设如图6-1所示.有n节车厢从A方向驶入车站,按进站顺序编号为1-n.你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶出车站.例如,出栈顺序(5 4 1 2 3)是不可能的,但(5 4 3 2 1)是可能的. 为了重组车厢,你可以借助中转站C.这是一个可以停放任意多节车厢的车站,但由于末端封顶,驶入C的车厢必须按照相反的顺序驶出C.对于每个车厢,一旦从A移入C,就不能再

例题6-2(Rails, UVa 514)

题目链接 给定入栈顺序,问能否以给出的顺序出栈. 众所周知,栈的特点是先入后出. 此特点在该题中体现为对于当前需要出栈的元素(要想先出),必须位于栈顶或者还未入栈(必须后入). 用数组target来存储出栈序列,target[B_now] 表示当前需要驶入B的车厢(即当前需要出栈的元素),A_first表示当前A中第一个车厢(即下一个入栈元素) 1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 5 c