题目链接

题意

在\(x\)轴上方有\(n\)个海岛,要在\(x\)轴建雷达,每个雷达的覆盖范围为半径为\(d\)的圆,问至少要建多少个雷达能覆盖所有海岛。

思路

对于每个海岛计算出雷达建立在什么范围(\(x\)轴上的一条线段)内能覆盖到它。排序并计算线段的交。

Code

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define maxn 200010
using namespace std;
typedef long long LL;
struct node {
double l, r;
}a[maxn];
int x[maxn], y[maxn];
bool cmp(node u, node v) {
return u.l < v.l || (u.l == v.l && u.r < v.r);
}
int main() {
int n, d;
scanf("%d%d", &n, &d);
for (int i = 0; i < n; ++i) scanf("%d%d", &x[i], &y[i]);
for (int i = 0; i < n; ++i) {
if (y[i] > d) { printf("-1\n"); return 0; }
double dx = sqrt(pow(d,2)-pow(y[i],2));
a[i].l = x[i] - dx, a[i].r = x[i] + dx;
}
sort(a, a+n, cmp);
double l = -inf, r = -inf;
int cnt = 0;
for (int i = 0; i < n; ++i) {
if (a[i].l <= r) l = max(l, a[i].l), r = min(r, a[i].r);
else ++cnt, l = a[i].l, r = a[i].r;
}
printf("%d\n", cnt);
return 0;
}

luogu 1325 雷达安装的更多相关文章

  1. luogu P1325 雷达安装

    题目描述 描述: 假设海岸线是一条无限延伸的直线.它的一侧是陆地,另一侧是海洋.每一座小岛是在海面上的一个点.雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围d.你的任务是建立尽量少 ...

  2. Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算)

    Libre 6009 「网络流 24 题」软件补丁 / Luogu 2761 软件安装问题 (最短路径,位运算) Description T 公司发现其研制的一个软件中有 n 个错误,随即为该软件发放 ...

  3. 洛谷 P1325 雷达安装 解题报告

    P1325 雷达安装 题目描述 描述: 假设海岸线是一条无限延伸的直线.它的一侧是陆地,另一侧是海洋.每一座小岛是在海面上的一个点.雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围d ...

  4. 落谷p1325雷达安装(计算几何)

    传送门 //p1325雷达安装 //很明显雷达应该安装在海岸线上 //而为了满足一个点被覆盖那在区间[x - sqrt(d ^ 2 - y ^ 2), x + sqrt(d ^ 2 - y ^ 2)] ...

  5. 【luogu1325】雷达安装--贪心

    题目描述 描述: 假设海岸线是一条无限延伸的直线.它的一侧是陆地,另一侧是海洋.每一座小岛是在海面上的一个点.雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围d.你的任务是建立尽量少 ...

  6. P1325 雷达安装

    传送门 思路: 采取贪心的思想. 把每个岛屿看作圆心,以雷达的范围 d 为半径,求出与 x 轴的左右两个交点,两交点所夹的区间就需要放置一个雷达,这样就把这道题转换为了区间取点问题.在枚举岛屿时,记录 ...

  7. 洛谷P1325 雷达安装

    题目 考虑对于一个小岛,如果有雷达可以覆盖它,则这些雷达肯定在一个区间里,则原题内容则变为区间选点问题 #include <bits/stdc++.h> using namespace s ...

  8. Poj1328Radar Installation雷达安装

    原题链接 经典贪心,转化为问题为,对于所有的区间,求最小的点数能使每个区间都至少有一个点. #include<iostream> #include<cstdio> #inclu ...

  9. Greedy:Radar Installation(POJ 1328)

    装雷达 题目大意,就是令在海岸线的(直线)一边是海(y>0),另一边是陆地(y<=0),在海岸线上装雷达,雷达可以覆盖的范围为d,海上有岛,(x,y),问你应该怎么装雷达,才能做到技能雷达 ...

随机推荐

  1. java,求1-100之和。

    package study01; public class TestWhile { public static void main(String[] args) { int sum = 0; int ...

  2. iOS开发遇到的坑之六--使用cocopods管理第三方库时,编译出现Library not found for -lPods问题的解决办法

    在项目中有时候会遇到Library not found for -lPods(这里的IPods指的是你具体的第三方库)的问题 出现这个错误的原因是:xcode在编译的时候找不到这个库,从而导致项目无法 ...

  3. windows系统下的两个批处理命令

    启动应用:***.exe 关闭应用:taskkill /f /im ***.exe 保存为.bat文件

  4. java工作环境配置jdk,idea

    下载 jdk 1.8 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 配置环境 ...

  5. 如何下载并安装 robomongo 到Ubuntu 系统

    官网下载软件,https://robomongo.org/download wget https://download.robomongo.org/1.2.1/linux/robo3t-1.2.1-l ...

  6. ubuntu安装easygui模块

    使用pip安装easygui 如果未安装pip,则使用如下命令 sudo apt-get install python-pip 安装完pip后,使用如下命令安装easygui sudo pip ins ...

  7. PHP将html内容转换为image图片

    /** * 将html内容转换为image图片 * @param $htmlcontent * @param $toimagepath * @author james.ou 2011-11-1 */ ...

  8. Python: simple drawings

    import cv2; # OpenCV Python import numbers; import numpy as np; import math; import matplotlib; impo ...

  9. str 方法总结整理

    #!/usr/bin/env python #Python 3.7.0 字符串常用方法 __author__ = "lrtao2010" #capitalize 将字符串的首字符改 ...

  10. Python入门学习笔记2:刷题

    1) LeetCode 强的面试题和算法题,要求也比较高,很多国内外的码农在上面刷题.难度从easy到hard都有,而且覆盖面极广,需要你的综合实力去答题. 最简单的题比如字符串的处理有的时候也要用到 ...