设为首页 加入收藏

TOP

UVA - 1615 Highway 区间覆盖
2015-11-21 01:02:58 来源: 作者: 【 】 浏览:2
Tags:UVA 1615 Highway 区间 覆盖

题目大意:在平面上有n个点和一个值D,要求再长度为L的x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里德距离不超过D

解题思路:算出每个点的区间范围。区间的重叠部分由几个区间构成就有几个点满足要求。

#include
   
     #include
    
      #include
     
       #define maxn 100010 using namespace std; double L, D; int n; struct villages{ double l, r; }vill[maxn]; bool cmp(const villages a, const villages b) { if(a.r == b.r) return a.l < b.l; else return a.r < b.r; } int main() { while(scanf("%lf%lf", &L, &D) == 2) { scanf("%d", &n); double x, y, len; for(int i = 0; i < n; i++) { scanf("%lf%lf", &x, &y); len = sqrt(D * D - y * y); vill[i].l = max(x - len,0.0); vill[i].r = min(L,x + len); } sort(vill, vill + n, cmp); int ans = 1; double r = vill[0].r; for(int i = 1; i < n; i++) if(r >= vill[i].l && r <= vill[i].r) continue; else{ ans++; r = vill[i].r; } printf("%d\n", ans); } return 0; }
     
    
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UVA - 1612 Guess 贪心 下一篇LeetCode 1 Two Sum 题解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: