雷达安装

原创 2018年04月16日 15:59:31

问题描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
Main.java

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

   public class Main {

    static int n,d;
    static boolean flag;
    static Node node[];

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        int x,y;
        n = in.nextInt();
        d = in.nextInt();
        if(n==0 && d==0)return;
        flag = true;
        node = new Node[n];
        for(int i=0;i<n;i++) {
            x = in.nextInt();
            y = in.nextInt();
            if(y>d)flag = false;
            else
                node[i] = new Node(x - Math.sqrt(d*d - y*y), x + Math.sqrt(d*d - y*y));
        }
        //按左端点排序
        Comparator<Node>comparator = new MyComparator();
        Arrays.sort(node,comparator);

        if(flag)System.out.println(solve());
        else System.out.println("-1");
        in.close();
    }

    public static int solve() {
        int ans;double now;
        ans = 1;now = node[0].getRight();
        //若当前线段与目前集合中的线段没有公共点,则新加入一个雷达
        for(int i=1;i<n;i++) {
            if(node[i].getLeft()<=now)  //如果左端点的值小于等于now,则不需要新加雷达
                now = Math.min(now, node[i].getRight());
            else {//如果大于,说明该区间与之前的区间不存在公共部分,则需要新加雷达
                ++ans;
                now = node[i].getRight();
            }
        }
        return ans;
    }
}

class MyComparator implements Comparator<Node>{


    public int compare(Node o1, Node o2) {     //升序
        if(o1.getLeft() > o2.getLeft())
            return 1;
        else if(o1.getLeft() == o2.getLeft())
            return 0;
        else return -1;
    }
}

Node.java

 public class Node {

    private double left;
    private double right;

    public Node(double left,double right){
        this.left = left;
        this.right = right;
    }


    public double getLeft() {
        return left;
    }


    public void setLeft(double left) {
        this.left = left;
    }


    public double getRight() {
        return right;
    }


    public void setRight(double right) {
        this.right = right;
    }
}

贪心算法--雷达安装(poj 1328)

雷达安装 题目描述:  假定海岸线是一条无限延伸的直线,陆地在海岸线的一边,大海在另一侧。海中有许多岛屿,每一个小岛我们可以认为是一个点。现在要在海岸线上安装雷达,雷达的覆盖范围是d,也就是说...
  • Randyhe_
  • Randyhe_
  • 2017-11-27 16:19:22
  • 172

雷达安装(贪心算法)

问题五: 雷达安装 输入文件:Radar.in 标准输出 Description 假定海岸线是一条无限长的直线,陆地在海岸线的一边,海洋在另一边。每个小岛是海洋这边中的一个点,任何一部安在海岸线上的雷...
  • tangyan_456
  • tangyan_456
  • 2007-08-05 14:56:00
  • 1360

计算几何——洛谷 P1325 雷达安装

https://www.luogu.org/problem/show?pid=1325 首先转换问题: 将岛屿设为覆盖半径为 D,则问题变为:每个岛屿的覆盖区域必须要有雷达。 又因为雷...
  • largecub233
  • largecub233
  • 2017-06-06 11:37:22
  • 211

雷达王3070安装驱动

  • 2011年08月31日 15:22
  • 2.07MB
  • 下载

贪心算法解决雷达站建站问题

问题描述: Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in th...
  • LiuPeiP_VIPL
  • LiuPeiP_VIPL
  • 2017-01-29 23:32:02
  • 732

AYITACM2016省赛第二周(dp+其他) A-雷达装置(区间选点问题)

Description Assume the coasting is an infinite straight line. Land is in one side of coas...
  • linyuxilu
  • linyuxilu
  • 2016-04-25 21:50:27
  • 163

POJ 1328 Radar Installation-放置雷达(贪心,区间,二维转一维)

http://poj.org/problem?id=1328 这个题题意是说,海上有n多岛,在海岸线上(x轴)建一个雷达能覆盖到与它距离不超过d的岛,求覆盖所有岛的最小雷达数。 . . ....
  • ACM_10000h
  • ACM_10000h
  • 2014-11-11 11:44:34
  • 1848

雷达测高、逆测距公式

今天做算法时,尽然忘了弧度的定义了...... --!一切都在图中
  • Lava_sdb
  • Lava_sdb
  • 2008-07-07 22:09:00
  • 3441

北大ACM1328——Radar Installation~~贪心

题目的大概意思是:给你N个坐标,雷达的半径为d,求至少安装多少个雷达才能将所有点覆盖。雷达都在 x 轴上,不能全部覆盖的就输出 -1. 思路大概是,先算出雷达覆盖每一个点的横坐标的范围。然后再来贪心...
  • qq_25425023
  • qq_25425023
  • 2015-05-27 15:32:24
  • 1725

罗斯蒙特导播雷达液位计3300手册

  • 2013年07月08日 15:57
  • 2.08MB
  • 下载
收藏助手
不良信息举报
您举报文章:雷达安装
举报原因:
原因补充:

(最多只允许输入30个字)