码迷,mamicode.com
首页 > 其他好文 > 详细

贪心——D - Radar Installation

时间:2019-02-10 15:07:59      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:represent   term   eve   math.h   ios   oca   infinite   tin   amp   

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

3 2
1 2
-3 1
2 1

1 2
0 2

0 0

Sample Output

Case 1: 2
Case 2: 1



题目大意:
就是给你n组数据和圆的半径d,让你在x轴上画半径为d的圆,问:如果将所有的点都画进去,最少需要多少个圆,这个题目和导弹拦截有点像,不过更加简单

思路:
就是先判断d是不是大于等于0,如果d<0,肯定是输出-1的,
之后输入数字,如果有坐标的纵坐标比d还要大,那么也是不对的也要输出-1
之后对坐标进行处理,把每一个坐标在x轴上的范围标记出来,并进行排序,先排右边的位置,右边位置越小就排在越前面,因为我们是要从横坐标左边往右边排
如果右边相同,就排左边,左边大的先排,因为区间范围小的肯定可以把区间范围大的包括进去,反之则不行。
排完序之后
就开始画圈圈。



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <iostream>
using namespace std;
const int maxn=1010;
struct node
{
    double l,r;
}exa[maxn];
bool cmp(node a,node b)
{
    if(a.r==b.r) return a.l>b.l;
    return a.r<b.r;
}

int main()
{
    int n,cnt=0;;
    double d,a,b;
    while(scanf("%d%lf",&n,&d)!=EOF&&(n+d))
    {
        bool flag=0;
        if(d>=0) flag=1;
        for(int i=0;i<n;i++)
        {
            scanf("%lf%lf",&a,&b);
            if(b>d) flag=0;
            if(flag)
            {
                exa[i].l=a-sqrt(d*d-b*b);
                exa[i].r=a+sqrt(d*d-b*b);
            }
        }
        sort(exa,exa+n,cmp);
        int ans=-1;
        if(flag)
        {
            ans=1;
            double maxr=exa[0].r;
            for(int i=1;i<n;i++)
            {
                if(exa[i].l>maxr)
                {
                    ans++;
                    maxr=exa[i].r;
                }
            }
        }
        cout << "Case " << ++cnt << ": " << ans << endl;
    }
    return 0;
}

  











贪心——D - Radar Installation

标签:represent   term   eve   math.h   ios   oca   infinite   tin   amp   

原文地址:https://www.cnblogs.com/EchoZQN/p/10359199.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!