POJ_3044_City Skyline(栈)
2014-02-28 21:17
357 查看
题型:贪心
题意:城市的正视图,所有的大楼都是矩形,给出每个高度改变时的坐标,问最少可以看出有几个大楼。
分析:
由题目可以看出,w和横坐标是木有用的。。。
用栈模拟,先将0压栈,然后遍历n个数,设当前高度为y,如果栈顶元素大于y的话,说明栈顶元素所代表的高度的楼找到了,就不断弹出栈顶元素并ans+1直到栈顶元素小于等于y,如果此时栈顶元素小于y的话,就将y压栈,否则continue。
代码:
题意:城市的正视图,所有的大楼都是矩形,给出每个高度改变时的坐标,问最少可以看出有几个大楼。
分析:
由题目可以看出,w和横坐标是木有用的。。。
用栈模拟,先将0压栈,然后遍历n个数,设当前高度为y,如果栈顶元素大于y的话,说明栈顶元素所代表的高度的楼找到了,就不断弹出栈顶元素并ans+1直到栈顶元素小于等于y,如果此时栈顶元素小于y的话,就将y压栈,否则continue。
代码:
#include<iostream> #include<cmath> #include<cstring> #include<stack> #include<cstdio> #define PI acos(-1.0) #define inf 0x3f3f3f3f #define E exp(double(1)) #define eps 1e-7 using namespace std; #ifdef __LL64 typedef __LL64 LL; #else typedef long long LL; #endif const int MAXN = 60000; int x,y[MAXN]; int main() { int n,w; while(~scanf("%d%d",&n,&w)) { for(int i=0; i<n; i++) { scanf("%d%d",&x,&y[i]); } y =0; stack<int> st; int ans = 0; st.push(0); for(int i=0; i<=n; i++) { while(st.top()>y[i] && !st.empty()) { st.pop(); ans++; } if(y[i]!=st.top()) { st.push(y[i]); } } printf("%d\n",ans); } return 0; }
相关文章推荐
- 在AWS上安装laravel框架
- AppleScript学习笔记(三)捕捉错误
- usaco 1.23
- 使用CMD建立指定格式的文件
- error 2005:libcmtd.lib和msvcrt.lib冲突
- PageRank算法细讲
- 如何删除数据表中重复数据(二)
- 训练局限玻尔斯曼机(Training Restricted Boltzmann Machines)
- Android 下载文件至SD卡,并用progressBar显示下载进度
- 在命令提示符窗口下(cmd)使用指令操作并编译java代码,运行java编译代码
- 数据通信与网络五——电话网和电视网进行数据传输
- RDO、SAD、SATD、λ(转贴) - [h.264]
- mac os 安装tomcat完全教程
- UML实战之Use Case Diagrams
- 排序算法之归并排序
- 打动面试官的五大技能
- C++线程池的实现
- linux shell编程学习笔记(9)正则表达式
- ubuntu 13 sogou input method install
- mysql修改密码 导入导出