题目链接:https://vjudge.net/problem/UVA-514

题目分析

题目的意思是给一个栈输入一系列数据,在这个过程中可以出栈,看能否达到某个结果。
刚开始我觉得这个情况好多,因此不是用模拟,而应该观察结果本身。对于结果中某个元素x,比他小的元素肯定已经入过栈了,此时可能有两种去处:

  1. 已经在结果里面了
  2. 还在栈里面

对于1.,只能说它比x 小而且在x的前面,除此之外没有其他约束了。
对于2.,那些比x小的元素在结果中的位置肯定在x的后面,而且肯定是逆序排列。因为只能进栈一次,而他们是从小到大进栈的,必然是从大到小出栈的。如果不符合这个条件肯定就是非法情况。
我的思路就是检查每个元素后面比他小的元素是否是逆序的,复杂度是O(n2)O(n^2)O(n2)
UVa里面有时候要求最后有换行,有时候又要求不能有空行,真是让人摸不着头脑。。

AC代码

#include <iostream>
#include <vector>
#include <deque>using namespace std;int n;
vector<int> arr;bool check_idx(int idx) {int x = arr[idx];int minx = x;for (int i = idx + 1; i < n; ++i) {if (arr[i] < x) {if (arr[i] > minx) return false;minx = arr[i];}}return true;
}bool check() {for (int i = 0; i < n; ++i) {if (!check_idx(i)) return false;}return true;
}bool first = true;int main() {ios::sync_with_stdio(false);while (cin >> n && n != 0) {//        if (first) first = false;
//        else cout << "\n";arr.resize(n);while (cin >> arr[0] && arr[0] != 0) {for (int i = 1; i < n; ++i) cin >> arr[i];if (check()) cout << "Yes\n";else cout << "No\n";}cout << "\n";}return 0;
}

更好的思路

看了一下书上了代码(书上的代码真的丑,写出这么晦涩的代码也是很厉害的),发现是可以进行模拟的,而且复杂度是O(n)O(n)O(n),如果题目有心刁难我上面的解法可能就会TLE。
模拟的思路就是,刚开始肯定是按照从小到大的元素进栈,如果我们结果中当前元素直接是这个入栈的元素,那么再直接出栈,否则就丢在栈里。如果不是当前入栈元素,那么就和栈顶的元素比较,如果也不是,那就先入栈,看看后面的元素还有没有希望,如果所有元素都已经入栈了,那就没希望了,直接GG。

AC代码

#include <iostream>
#include <vector>
#include <deque>using namespace std;int n;
deque<int> s;
vector<int> arr;bool check() {int x = 1;for (int i = 0; i < n; ++i) {if (arr[i] == x) {++x;continue;}if (!s.empty()) {if (s.back() == arr[i]) {s.pop_back();continue;} else if (s.back() > arr[i]) {return false;}}
//        if (x > arr[i]) return false;if (x < n) {s.push_back(x++);--i;} else {return false;}}return true;
}int main() {ios::sync_with_stdio(false);while (cin >> n && n != 0) {arr.resize(n);while (cin >> arr[0] && arr[0] != 0) {s.clear();for (int i = 1; i < n; ++i) cin >> arr[i];if (check()) cout << "Yes\n";else cout << "No\n";}cout << "\n";}
}

感觉这道题的数据很弱,我刚才把s.clear()写到循环外面去了都AC了。。
添加了一个优化语句:当栈顶元素比结果中的当前元素大时直接不可达,原因是后面的元素肯定都比栈顶元素大。

UVA - 514:Rails相关推荐

  1. Uva 514 Rails

    原文地址 Uva 514 Rails 铁轨 PopPush城市有一座著名的火车站.这个国家到处都是丘陵.而这个火车站是建于上一个世纪.不幸的是,那时的资金有限.所以只能建立起一条路面铁轨.而且,这导致 ...

  2. 例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514)

    栈应用 例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514) 错解 1.每次要把栈清空 2.不能用空的栈(栈顶)去比较 #include<iostream&g ...

  3. 暑期集训4:栈,树,优先队列 例 :  UVA - 514 ​​​​​​​​​​​​​​

    2018学校暑期集训第四天--栈,树,优先队列 例题  --   UVA - 514 Rails There is a famous railway station in PopPush City. ...

  4. 铁轨(UVa 514) 经典数据结构算法,铁轨问题

    铁轨(UVa 514) 经典算法,铁轨问题 关于数据结构中栈的应用, 题目: PopPush城市有一座著名的火车站.这个国家到处都是丘陵.而这个火车站是建于上一个世纪.不幸的是,那时的资金有限.所以只 ...

  5. UVA - 1103:Ancient Messages

    Ancient Messages 来源:UVA 标签: 参考资料: 相似题目: 题目 In order to understand early civilizations, archaeologist ...

  6. Lilu:Rails Mockup驱动开发之道

    在两年前就有过一场争论,争论的焦点在于Rails框架及它缺乏内建模板语言的支持,还有是否要为Rails引入这样的模板语言.直至今天,已经存在有不下五种的模板系统:ERB. HAML.Liquid.Am ...

  7. UVA - 136:Ugly Numbers

    Ugly Numbers 来源:UVA 标签: 参考资料:<算法竞赛入门经典>P120 相似题目: 题目 Ugly numbers are numbers whose only prime ...

  8. 专攻难题:Rails、MVC及最常用的Rails命令

    全文共5560字,预计学习时长14分钟 图源:unsplash 在使用Ruby编写web应用程序时,创始人David HeinemeierHansson说,他只不过是将以往应用程序的通用部分复制粘贴到 ...

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

    励志用尽量少的代码做高效的表达. 提交(题目)链接→UVa-514 此题的本质是:给出"入栈顺序",判断给定序列是否可以出栈. 有点像这种题: 因此思路也类似: 思路: 数组存储列 ...

最新文章

  1. Unity 3D游戏开发学习教程
  2. Spring Cloud Feign的两种使用姿势
  3. C# 学习笔记(14)自己的串口助手----多行发送
  4. Axios——Axios封装DEMO
  5. Windows下动态加载可执行代码原理简述
  6. 李开复评价马斯克:他真正的目的是把人变成半机械人
  7. index 生成创建index的脚本
  8. Error:java: Annotation processing is not supported for module cycles.异常解决
  9. 远程对象工厂设计模式
  10. Android源码学习之接着浅析SystemServer
  11. matlab:正态分布的概率密度图形
  12. NDoc 用户指南(一)
  13. C++17 并行排序初体验
  14. HTML基础-DAY1
  15. RAML规范1.0(译文)
  16. 被AMD显卡的专有驱动折磨的经历
  17. 最新广告法规定禁用词汇,不幸被通报,官网小伙伴们记得文案检查下哈
  18. unity实现吸附功能的效果
  19. 求大神赐教Maven中子模块之间无法建立依赖关系问题
  20. mac去除dmg打开密码的方法

热门文章

  1. 关于窗口的一些小脚本
  2. yaml,json,ini这三种格式用来做配置文件优缺点
  3. THINKPHP增删改查--(改)
  4. 浅谈Windows下SVN在Android Studio中的配置、基本使用及解除关联
  5. 路径 (Path)–nodejs
  6. SAP MM/FI 自动过账实现 OBYC 接口执行
  7. 声速的测量的实验原理和应用_声速的测定实验报告心得体会
  8. 云服务器布置_【阿里云ECS】(一)云服务器上安装RStudio-server
  9. sql java驱动程序_Microsoft SQL Server JDBC 驱动程序支持矩阵
  10. 鸿蒙系统的全面开源,华为:打造全球的操作系统,鸿蒙今日全面开源!