zoukankan      html  css  js  c++  java
  • POJ:1328-Radar Installation

    Radar Installation

    Time Limit: 1000MS Memory Limit: 10000K

    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.

    这里写图片描述

    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


    • 题意就是在x轴上方很多个点,要求用圆心在x轴上半径为r的圆将这些点覆盖,问最少要用多少个圆。这是一个很好的题。

    • 一开始知道这是一个贪心,但是贪心的方法很久都没想到。其实就是先将这些点按照x坐标排序,然后确定第一个点的圆心,然后看第二个点圆能够建立圆心区域的最左边是否在第一个圆心的左边,是则将第二个圆心替换第一个圆的圆心,如果不是就看第二个点是否在第一个圆内,如果在圆内则不用管,不在就需要建一个新的圆来包含这个点,然后依次类推就可以得到最佳答案。输出-1就是y轴上的坐标比给出的r还更大。

    • 还有就是要注意一下浮点数精度的问题。


    #include<stdio.h>
    #include<queue>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    const int maxn = 1010;
    struct node
    {
        int x,y;
    } p[maxn];
    
    bool cmp(node a,node b)
    {
        if(a.x != b.x)
            return a.x < b.x;
        return a.y > b.y;
    }
    
    bool init(int n,int r)
    {
        bool flag = false;
        for(int i=0; i<n; i++)
        {
            scanf("%d%d",&p[i].x,&p[i].y);
            if(p[i].y > r)
                flag = true;
        }
        sort(p,p+n,cmp);
        return flag;
    }
    
    int solve(int n,int r)
    {
        double pre_pos = -100000;
        int ans = 1;
        node now;
        queue<node> qu;
        for(int i=0; i<n; i++)
            qu.push(p[i]);
        pre_pos = 0x7f7f7f7f;
        while(!qu.empty())
        {
            now = qu.front();
            qu.pop();
            double x = now.x + sqrt(r*r - now.y*now.y);
            if(x < pre_pos)//圆心替换
            {
                pre_pos = x;
                continue;
            }
            if((now.x-pre_pos)*(now.x-pre_pos) + now.y*now.y > r*r)//不包含在上一个点的圆内,需要新的圆
            {
                ans++;
                pre_pos = x;
            }
        }
        return ans;
    }
    
    int main()
    {
        int n,r,t = 1;
        while(scanf("%d%d",&n,&r))
        {
            if(n+r == 0)
                return 0;
            bool flag = init(n,r);
            if(flag)
            {
                printf("Case %d: -1
    ",t++);
                continue;
            }
            int ans = solve(n,r);
            printf("Case %d: %d
    ",t++,ans);
        }
    }
    
  • 相关阅读:
    session和cookie的理解
    CSS3媒体查询能检测到的特性小结
    怎样让搜索引擎收录你的网站|向搜索引擎提交你的网站
    vue-i18n vue-cli项目中实现国际化 多语言切换功能 一
    chrome中hack解决input:-webkit-autofill自定义样式
    知识分享
    iPhone的CSS3媒体查询
    C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法
    快速原型设计工具-Axure RP的介绍及简单使用(生产初期向客户展示设计产品的原型-也就是展示产品)
    纯CSS实现下拉菜单及下拉容器等(纯CSS实现导航条及导航下拉容器)
  • 原文地址:https://www.cnblogs.com/GoldenFingers/p/9107240.html
Copyright © 2011-2022 走看看