UVA - 514 Rails
来源:互联网 发布:crossover软件 编辑:程序博客网 时间:2024/06/18 16:38
#include <cstdio>
#include <stack>
using namespace std;
const int MAXN = 1000 + 10;
int n, target[MAXN];
int main()
{
while(~scanf("%d", &n) && n)
{
while(~scanf("%d", &target[1]) && target[1])
{
stack<int> s;
int A = 1, B = 1;
for(int i = 2; i <= n; i++)
scanf("%d", &target[i]);
int ok = 1;
while(B <= n)
{
if(A == target[B]) { A++; B++; } //若满足输入所示要求,则直接到B端
else if(!s.empty() && s.top() == target[B]) { s.pop(); B++; } //若不满足且栈不为空,则出栈
else if(A <= n) s.push(A++); //若不满足且栈为空,则入栈
else { ok = 0; break; } //若三个都不满足则说明无法重组,ok = 0
}
printf("%s\n", ok ? "Yes" : "No");
}
printf("\n");
}
return 0;
#include <stack>
using namespace std;
const int MAXN = 1000 + 10;
int n, target[MAXN];
int main()
{
while(~scanf("%d", &n) && n)
{
while(~scanf("%d", &target[1]) && target[1])
{
stack<int> s;
int A = 1, B = 1;
for(int i = 2; i <= n; i++)
scanf("%d", &target[i]);
int ok = 1;
while(B <= n)
{
if(A == target[B]) { A++; B++; } //若满足输入所示要求,则直接到B端
else if(!s.empty() && s.top() == target[B]) { s.pop(); B++; } //若不满足且栈不为空,则出栈
else if(A <= n) s.push(A++); //若不满足且栈为空,则入栈
else { ok = 0; break; } //若三个都不满足则说明无法重组,ok = 0
}
printf("%s\n", ok ? "Yes" : "No");
}
printf("\n");
}
return 0;
}
心得:刚做这题时感觉有别的做法,就搜了下报告,结果网上基本都是一样的做法,就是改了个变量名= =,面对这种现象,我只想说,玩一两次还是可以的,玩多了就没意思了。。。
回归正题,LRJ大牛的代码还是一如既往的无可挑剔,选择、条件和变量都用的恰到好处,实在佩服。。。
借这道题我也发表下我自己对栈的理解:本来想按照别的做法,因为这无非就是两个有序数列的组合嘛。后来想想不对,第一个不符合的元素永远不可能排在第二、三个不符合元素的前面。然后想用下别的方法限制下,没想出来= =,看来栈就是前人为了解决这样的问题而留给我们的宝贵遗产,这也就是所谓的数据结构!!!刚开始我还不信,试了几组数据才体会到栈的精妙,拿1,2,3,4,5的例子来说,输出5,4,3,2,1、4,5,3,2,1、3,4,5,2,1,只要出栈顺序是可能的,凡是不满足第一个条件的全满足第二个条件,相当于两个数列按照题目所给方式合并,这完全不是凭空能想出来的算法。总之相当于有条件数列合并的简化版,大大简化了我们的算法~
感想虽不多不过还是想写出来,不喜轻喷= =
补充下,LRJ的代码有点问题,想必是想让我们好好看代码吧= =
0 0
- Uva 514 Rails
- UVa 514 - Rails
- UVA 514 - Rails
- Uva Oj 514 - Rails
- uva 514 Rails
- UVA 514 Rails
- UVA 514 Rails
- Uva 514 Rails
- UVA 514 - Rails(模拟)
- UVA - 514 Rails
- UVa 514 Rails
- uva 514 - Rails(栈)
- UVa 514 Rails(栈)
- UVA 514 Rails
- UVa 514 - Rails
- UVA - 514 Rails
- UVa 514 - Rails
- Uva 514 Rails
- 网络常见的组播地址 解释
- hdoj 1045 Fire Net(一个方向遍历)
- 读书笔记-整洁代码编写
- MATLAB 神经网络训练参数解释
- CKEditor 使用方法
- UVA - 514 Rails
- cmake的一些小经验
- 如何查看Web服务器并发请求连接数
- zoj1091Knight Moves dfs+bfs+floyd
- YUV420SP和YUV420SP32M的区别
- 丢掉IDE,回到Java的第一堂课
- LeetCode 221: Maximal Square
- 网页中的表单
- KNN分类算法的实现