解题思路:给出n个岛屿,n个岛屿的坐标分别为(a1,b1),(a2,b2)-----(an,bn),雷达的覆盖半径为r

求所有的岛屿都被覆盖所需要的最少的雷达数目。

首先将岛屿坐标进行处理,因为雷达的位置在x轴上,所以我们设雷达的坐标为(x,0),对于任意一个岛屿p(a,b),因为岛屿要满足在雷达的覆盖范围内,所以 (x-a)^2+b^2=r^2,解得

xmin=a-sqrt(r*r-b*b);//即为区间的左端点 xmax=a+sqrt(r*r-b*b);//即为区间的右端点

接下来区间选点即可

------------------------------tmp

1                                                                       a[i]----------------------------b[i]

2                             a[i]--------b[i]

3                                       a[i]-------------------- b[i]

用tmp记录当前雷达坐标,将区间按左端点升序排序后,从左到右扫描,会出现 以上3种情况

1 当前tmp<a[i],雷达无法覆盖到下一个区间,所以增加一个新的雷达,同时更新雷达的坐标为该区间的右端点(贪心,在越右边,越有可能覆盖到下一个区间),即为tmp=b[i]

2 当前b[i]<tmp,雷达无法覆盖该区间,但是该区间被包含在tmp所在区间内,所以不需要增加雷达,更新tmp的值即可 tmp=b[i]

3  该区间被雷达覆盖,不做处理。

Radar Installation
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 55518   Accepted: 12502

Description

Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only cover d distance, so an island in the sea can be covered by a radius installation, if the distance between them is at most d.
We use Cartesian coordinate system, defining the coasting is the x-axis. The sea side is above x-axis, and the land side below. Given the position of each island in the sea, and given the distance of the coverage of the radar installation, your task is to write a program to find the minimal number of radar installations to cover all the islands. Note that the position of an island is represented by its x-y coordinates. Figure A Sample Input of Radar Installations

Input

The input consists of several test cases. The first line of each case contains two integers n (1<=n<=1000) and d, where n is the number of islands in the sea and d is the distance of coverage of the radar installation. This is followed by n lines each containing two integers representing the coordinate of the position of each island. Then a blank line follows to separate the cases.
The input is terminated by a line containing pair of zeros

Output

For each test case output one line consisting of the test case number followed by the minimal number of radar installations needed. "-1" installation means no solution for that case.

Sample Input

  1. 3 2
  2. 1 2
  3. -3 1
  4. 2 1
  5.  
  6. 1 2
  7. 0 2
  8.  
  9. 0 0

Sample Output

  1. Case 1: 2
  2. Case 2: 1
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. double a[1005],b[1005];
  5. void bubblesort(double a[],double b[],int n)
  6. {
  7. int i,j;
  8. double t;
  9. for(i=1;i<=n;i++)
  10. {
  11. for(j=i+1;j<=n;j++)
  12. {
  13. if(a[i]>a[j])
  14. {
  15. t=a[i];
  16. a[i]=a[j];
  17. a[j]=t;
  18.  
  19. t=b[i];
  20. b[i]=b[j];
  21. b[j]=t;
  22.  
  23. }
  24. }
  25. }
  26. }
  27. int main()
  28. {
  29. int n,i,sum,flag,tag=0;
  30. double x,y,r,tmp;
  31. flag=1;
  32. while(scanf("%d %lf",&n,&r)!=EOF&&(n||r))
  33. {
  34. tag=0;
  35. for(i=1;i<=n;i++)
  36. {
  37. scanf("%lf %lf",&x,&y);
  38.  
  39. if(r>=fabs(y))
  40. {
  41. a[i]=x-sqrt(r*r-y*y);
  42. b[i]=x+sqrt(r*r-y*y);
  43. }
  44. else
  45. tag=1;
  46.  
  47. }
  48. if(tag)//不考虑r<0的情况也能通过
  49. printf("Case %d: -1\n",flag++);
  50. else
  51. {
  52. bubblesort(a,b,n);
  53. sum=1;
  54. tmp=b[1];
  55. for(i=2;i<=n;i++)
  56. {
  57. if(a[i]>tmp)
  58. {
  59. tmp=b[i];
  60. sum++;
  61. }
  62. else if(b[i]<tmp)
  63. tmp=b[i];
  64. }
  65. printf("Case %d: %d\n",flag++,sum);
  66. }
  67. }
  68. }

  

POJ 1328 Radar Installation 【贪心 区间选点】的更多相关文章

  1. POJ - 1328 Radar Installation(贪心区间选点+小学平面几何)

    Input The input consists of several test cases. The first line of each case contains two integers n ...

  2. POJ 1328 Radar Installation 贪心 A

    POJ 1328 Radar Installation https://vjudge.net/problem/POJ-1328 题目: Assume the coasting is an infini ...

  3. poj 1328 Radar Installation(贪心+快排)

    Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...

  4. POJ 1328 Radar Installation 贪心算法

    Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...

  5. poj 1328 Radar Installation(贪心)

    题目:http://poj.org/problem?id=1328   题意:建立一个平面坐标,x轴上方是海洋,x轴下方是陆地.在海上有n个小岛,每个小岛看做一个点.然后在x轴上有雷达,雷达能覆盖的范 ...

  6. POJ 1328 Radar Installation 贪心 难度:1

    http://poj.org/problem?id=1328 思路: 1.肯定y大于d的情况下答案为-1,其他时候必定有非负整数解 2.x,y同时考虑是较为麻烦的,想办法消掉y,用d^2-y^2获得圆 ...

  7. POJ 1328 Radar Installation 贪心题解

    本题是贪心法题解.只是须要自己观察出规律.这就不easy了,非常easy出错. 一般网上做法是找区间的方法. 这里给出一个独特的方法: 1 依照x轴大小排序 2 从最左边的点循环.首先找到最小x轴的圆 ...

  8. POJ 1328 Radar Installation#贪心(坐标几何题)

    (- ̄▽ ̄)-* #include<iostream> #include<cstdio> #include<algorithm> #include<cmath ...

  9. 贪心 POJ 1328 Radar Installation

    题目地址:http://poj.org/problem?id=1328 /* 贪心 (转载)题意:有一条海岸线,在海岸线上方是大海,海中有一些岛屿, 这些岛的位置已知,海岸线上有雷达,雷达的覆盖半径知 ...

随机推荐

  1. Tjoi2019 甲苯先生和大中锋的字符串 后缀自动机_差分

    tjoi胆子好大,直接出了两道送分题...... 都 9102 年了,还有省选出模板题QAQ...... Code: #include <bits/stdc++.h> #define se ...

  2. luogu P2634 [国家集训队]聪聪可可 点分治

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...

  3. [NOI2005]瑰丽华尔兹_动态规划_单调队列

    Code: #include<cstdio> #include<cstring> #include<deque> #include<algorithm> ...

  4. Java Web中的mapper,service,controller,model

    Java Web中的mapper,service,controller,model作用分别是:java web中mapper是对象持久化映射层,一般会继承ibatis或者mybatisservive是 ...

  5. 嵌入式 ThriftServer in Spark

    我们知道在Spark中可以通过start-thriftServer.sh 来启动ThriftServer,之后并可以通过beeline或者JDBC来连接并执行Spark SQL.在一般的Spark应用 ...

  6. C++进阶 STL(2) 第二天 一元/二元函数对象、一元/二元谓词、stack容器、queue容器、list容器(双向链表)、set容器、对组、map容器

    01 上次课程回顾 昨天讲了三个容器 string  string是对char*进行的封装 vector 单口容器 动态数组 deque(双端队列) 函数对象/谓词: 一元函数对象: for_each ...

  7. Python学习笔记(3)for循环和while循环

    2019-02-25 (1)break语句:终止当前循环,跳出循环体. (2)continue语句:终止本轮循环并开始下一轮循环(在下一轮循环开始前,会先测试循环条件). (3)for循环 ① ran ...

  8. Mybatis拦截器执行过程解析

    上一篇文章 Mybatis拦截器之数据加密解密 介绍了 Mybatis 拦截器的简单使用,这篇文章将透彻的分析 Mybatis 是怎样发现拦截器以及调用拦截器的 intercept 方法的 小伙伴先按 ...

  9. 【codeforces 807A】Is it rated?

    [题目链接]:http://codeforces.com/contest/807/problem/A [题意] 给你n个人在一场CF前后的rating值; 问你这场比赛是不是计分的 [题解] 如果有一 ...

  10. JAVAEE网上商城项目总结

    发送邮件实现(使用QQ邮箱发送到指定邮箱) 需要的jar 邮件发送类代码: package util; import java.util.Properties; import javax.mail.A ...