19行代码AC——例题 6-2 铁轨(Rails, UVa 514)——解题报告

励志用尽量少的代码做高效的表达。


提交(题目)链接→UVa-514


此题的本质是:给出“入栈顺序”,判断给定序列是否可以出栈。
有点像这种题:

因此思路也类似:

思路:

数组存储列车调度顺序, 栈存储正常入栈顺序, 若数组头=栈顶,数组移到下一位,栈顶元素弹出
遍历完毕后, 若栈空,则说明全部调度完毕, 输出Yes

注意点:

1、输出的是Yes不是YES!(最开始看错,哭晕在厕所)
2、每组结果间有空行,最后一个结果后的空行也不能省略。
3、本题的输入方式很搞心态,输入一个n后,只要接下来的n行不出现0,就可以一直输入下去。 因此可以尝试自底向上的编程方法:先编写主体思路, 最后补充输入格式。

代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
	int a[1010];			
	int n; while((cin >> n) && n) {
		while(cin >> a[1] && a[1]) {
			for(int i = 2; i <= n; i++) { cin >> a[i]; } 
			stack<int> s2;
			int j = 1;
			for(int i = 1; i <= n; i++) {
				s2.push(i);
				while((!s2.empty()) && (s2.top() == a[j])) { j++; s2.pop(); }
			} 
 			cout << ((s2.empty()&&(j==n+1)) ? "Yes\n" : "No\n");
 		} 
		cout << "\n";
	}
	return 0;
} 

收获:

1、自底向上的编程方法。
2、对栈的使用熟练度提高。


择苦而安,择做而乐。虚拟现实终究比不过真实精彩之万一。

发布了86 篇原创文章 · 获赞 79 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43899069/article/details/104831434