UVA 10020
来源:互联网 发布:复制别人的淘宝装修 编辑:程序博客网 时间:2024/05/21 17:40
lrj入门经典中介绍的区间覆盖问题,裸的,不过贪心过程稍微复杂一点。
按照书上的过程,先把和要覆盖区间无交集的区间(仅有有一个点也算无交集)删掉,然后根据左值进行排序,这样我们只需扫描一遍数组即可,每次选取坐直小于等于目标区间左值区间,找到最大右值,然后将目标左值改为最大右值,记录路径,并且删除右值小于等于当前目标左值的区间,依次往后即可。
#include <iostream>#include <algorithm>using namespace std;struct coor{int x,y;}w[100010];int ans[100010],anss,size;bool cmp(struct coor a,struct coor b){return a.x<b.x;}int main(){int T;cin>>T;while(T--){size=anss=0;int l=0,r;cin>>r;int a,b;while(cin>>a>>b&&(a||b)){if(a>b) swap(a,b);if(b<=l||a>=r) continue;w[size].x=a;w[size].y=b;size++;}sort(w,w+size,cmp);for(int i=0;i<size;){int maxy=-1,maxp=i;while(i<size&&w[i].x<=l){if(w[i].y>maxy) {maxy=w[i].y;maxp=i;}i++;}if(maxy==-1) break;l=maxy;ans[anss++]=maxp;if(l>=r) break;while(i<size&&w[i].y<=l) i++;}if(l<r) cout<<0;else{cout<<anss<<endl;for(int i=0;i<anss;i++){if(i) cout<<endl;cout<<w[ans[i]].x<<" "<<w[ans[i]].y;}}cout<<endl;if(T) cout<<endl;}return 0;}
0 0
- uva 10020
- UVA 10020
- UVA 10020
- uva 10020
- UVa 10020 - Minimal coverage
- UVa 10020 - Minimal coverage
- uva 10020 - Minimal coverage
- uva 10020 - Minimal coverage
- UVA 10020 Minimal coverage
- UVA 10020 - Minimal coverage
- UVA 10020 Minimal coverage
- UVa:10020 Minimal coverage
- uva 10020 Minimal coverage
- uva 10020 - Minimal coverage
- uva 10020 Minimal coverage
- UVa-10020 - Minimal coverage
- uva 10020 - Minimal coverage
- uva 10020(贪心)
- MyEclipse JSP报 Unhandled event loop exception No more handles
- 《A beautiful Mind》Abstract
- jQuery uploadify3.2版本使用教程01
- delphi写的九九乘法表
- Eclipse 代码分块 类似 VS #region .......#endregion
- UVA 10020
- 2014年蓝桥杯java B组第7题 扑克序列问题
- 关于ZigBee基础的其余两篇文章
- hdu 1172 猜数字
- Lua学习之7:Chunk
- Java基础——多线程
- [C/C++标准库]_[初级]_[unary_function 和 binary_function]
- Chrome 搜索引擎添加
- vsftp上传不了问题解决