UVA 1615 Highway 区间选点 经典贪心 (SEERC 2005)
来源:互联网 发布:linux切换oracle实例 编辑:程序博客网 时间:2024/05/22 06:54
一定要根据右端点从小到大排序,因为为了保证一次扫过满足每个区间,那么被包含区间应该排在包含它的区间前面。
#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>using namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)#define for1(a, n) for (int (a) = 1; (a) <= (n); (a)++)#define sqr(x) ((x)*(x))typedef long long ll;typedef pair<int, int> pii;const int INF =0x3f3f3f3f;const int maxn= 100000 ;double L,D;int n;struct Seg{ double le,ri; Seg(){} Seg(double le,double ri):le(le),ri(ri){} bool operator<(const Seg g)const { return ri<g.ri; }}a[maxn+10];void cope(int ind,double & x,double &y){ double delta=sqrt(sqr(D)-sqr(y)); a[ind]=Seg( max(0.0,x-delta),min(L,x+delta) );}void work(){ int ans=0; double now=-1; for1(i,n) { if(a[i].le<=now) { continue; } else { now=a[i].ri; ans++; } } printf("%d\n",ans);}int main(){ while(~scanf("%lf%lf",&L,&D)) { scanf("%d",&n); double x,y; for1(i,n) { scanf("%lf%lf",&x,&y); cope(i,x,y); } sort(a+1,a+1+n); work(); } return 0;}
0 0
- UVA 1615 Highway 区间选点 经典贪心 (SEERC 2005)
- POJ 3485 Highway (贪心, 区间选点)
- UVa - 1615 Highway 高速公路 贪心+区间选点 重庆一中高2018级竞赛班第五次测试 2016.7.26 Problem 1
- uva 1615Highway 贪心
- UVA 10691 - Subway(贪心+区间选点)
- uva 10148 Advertisement (贪心-区间选点)
- uva 1615 (区间选点)
- UVA - 1615 Highway 区间覆盖
- UVA - 1615 Highway 区间覆盖
- UVa 1615 - Highway(贪心)
- UVa 1615:Highway(贪心)
- 贪心算法-区间选点
- 贪心之区间选点
- 区间选点问题【贪心】
- 贪心--区间选点问题
- UVA 10148 Advertisement (贪心 + 区间选点问题)
- UVA 10148 Advertisement 贴广告的艺术 贪心 区间选点
- Uva 11134 问题分解,贪心策略区间选点问题
- [LeetCode]60. Permutation Sequence
- 【BZOJ1013】球形空间产生器sphere 高斯消元
- hdu 3010
- 3.1.3 Memcached的安装(2)
- 内部类
- UVA 1615 Highway 区间选点 经典贪心 (SEERC 2005)
- uboot必须解决哪些问题
- An Introduction to Machine Learning with Python
- Linux下配置用msmtp和mutt发邮件
- iOS开发总结之仿qq侧滑功能
- js代码实现查找关键字高亮显示
- GUI之绘制2D贴图
- poj 1741 树的分治。。。。
- 欢迎使用CSDN-markdown编辑器