uva 1615 高速公路(贪心,区间问题)

给定平面上n个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里得距离不超过D。(n<=1e5)

对于每个点,可以找出在x轴上的对应线段,于是这道题就被转换成了一个区间选点问题。将所有线段都按右端点排好序,然后每次将点取在线段的最右端,如果覆盖不到最新线段就再创造一个新点,这样一直贪心的取下去即可。

#include <cmath>
#include <cctype>
#include <cstdio>
#include <algorithm>
using namespace std; const int maxn=1e5+5;
double sqr(double x){ return x*x; } int n, L, D;
struct Line{
void set(double x, double y){
l=x; r=y;
if (l<0) l=0;
if (r>L) r=L;
}
double l, r;
}line[maxn]; bool cmp1(Line &x, Line &y){
return x.r<y.r; } int main(){
while (~scanf("%d", &L)){
scanf("%d%d", &D, &n);
double x, y, tmp;
for (int i=0; i<n; ++i){
scanf("%lf%lf", &x, &y);
tmp=sqrt(sqr(D)-sqr(y));
line[i].set(x-tmp, x+tmp);
}
sort(line, line+n, cmp1);
double rgtest=-1; int tot=0;
for (int i=0; i<n; ++i)
if (line[i].l>rgtest){
rgtest=line[i].r; ++tot; }
printf("%d\n", tot);
}
return 0;
}

最新文章

  1. C#编写window服务,一步一步(1)
  2. vim_cfg
  3. oracle中用户删除不了,ORA-01940提示 “无法删除当前已连接用户”
  4. Unity3D手游开发实践
  5. BIOS设置第一启动项
  6. Egret应用开发实践(01) Egret与WebPack
  7. 找出图像I的代数中心
  8. 【原】Object 异常静态
  9. HTML5:一个拖拽网页元素的例子
  10. asp.net中的<%%>形式的详细用法实例讲解
  11. linux之utime函数解析
  12. iOS加密个人见解
  13. 实现标签的添加与删除(tags)
  14. Java:Object类的equals()方法 如何编写一个完美的equals()方法
  15. destoon 开启邮箱
  16. Linux 桌面玩家指南:06. 优雅地使用命令行及 Bash 脚本编程语言中的美学与哲学
  17. IDEA (mac版)
  18. Aurora的安装和中文配置
  19. c/c++ 数组的智能指针 使用
  20. SQL not exist out join

热门文章

  1. Python基础-redis模块使用
  2. java--xml文件读取(DOM)
  3. org.apache.catalina.core.StandardWrapperValve invoke报错
  4. 09 - Django应用第六步
  5. stl_set.h
  6. BeanUtils介绍及使用
  7. buildroot mysql mysql.mk hacking
  8. CRT Library Features
  9. JasperReports项目中的应用
  10. excel2003, 2007最大行列、sheet数