uva 1615 高速公路(贪心,区间问题)
2024-10-20 03:27:28
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;
}
最新文章
- C#编写window服务,一步一步(1)
- vim_cfg
- oracle中用户删除不了,ORA-01940提示 “无法删除当前已连接用户”
- Unity3D手游开发实践
- BIOS设置第一启动项
- Egret应用开发实践(01) Egret与WebPack
- 找出图像I的代数中心
- 【原】Object 异常静态
- HTML5:一个拖拽网页元素的例子
- asp.net中的<%%>形式的详细用法实例讲解
- linux之utime函数解析
- iOS加密个人见解
- 实现标签的添加与删除(tags)
- Java:Object类的equals()方法 如何编写一个完美的equals()方法
- destoon 开启邮箱
- Linux 桌面玩家指南:06. 优雅地使用命令行及 Bash 脚本编程语言中的美学与哲学
- IDEA (mac版)
- Aurora的安装和中文配置
- c/c++ 数组的智能指针 使用
- SQL not exist out join
热门文章
- Python基础-redis模块使用
- java--xml文件读取(DOM)
- org.apache.catalina.core.StandardWrapperValve invoke报错
- 09 - Django应用第六步
- stl_set.h
- BeanUtils介绍及使用
- buildroot mysql mysql.mk hacking
- CRT Library Features
- JasperReports项目中的应用
- excel2003, 2007最大行列、sheet数