poj1328 Radar Installation

Radar Installation
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 41948 Accepted: 9286

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

3 2
1 2
-3 1
2 1

1 2
0 2

0 0

Sample Output

Case 1: 2
Case 2: 1
 
简单的一题贪心,居然在pe上纠结半天。。
 
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;

struct point{
int x; int y;}p[1001];

int cmp(const void *a,const void *b){
struct point *c = (point*)a;
struct point *d = (point*)b;
if(c->x!=d->x)
    return c->x - d->x;
else
    return d->y - c->y;
}

int main()
{
    int case1=0,d,n,count=1;
    bool flag;
    while(1){
    case1++;
    count = 1;
    flag = false;
    cin>>n;
    cin>>d;
    if(n==0&&d==0)
        break;
    for(int i=0;i<n;i++)
    {
        cin>>p[i].x;
        cin>>p[i].y;
        if(p[i].y>d)
            flag=true;
    }
    if(flag){
        count = -1;
        goto end;
    }

    qsort(p,n,sizeof(p[0]),cmp);

    double left[1000],right[1000],temp;
    for(int i=0;i<n;i++)
        {
            left[i]=p[i].x-sqrt(d*d-p[i].y*p[i].y);
            right[i]=p[i].x+sqrt(d*d-p[i].y*p[i].y);
        }
        temp = right[0];

    for(int i=1;i<n;i++){
        if(right[i]<temp)
            temp=right[i];
        else if(temp<left[i]){
            count++;
            temp = right[i];
        }
    }
    end:
     cout<<"Case "<<case1<<": "<<count<<endl;
    }
     return 0;
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值