zoukankan      html  css  js  c++  java
  • POJ1328 Radar Installation 【贪心·区间选点】

    Radar Installation
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 54593   Accepted: 12292

    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
    

    Source


    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <algorithm>
    
    #define maxn 1010
    using namespace std;
    
    struct Node {
        double u, v;
        friend bool operator<(const Node& a, const Node& b) {
            return a.u < b.u;
        }
    } E[maxn];
    int N, D;
    
    int main() {
        int i, ok, id, ans, cas = 1;
        double x, y, d, flag;
        while(scanf("%d%d", &N, &D), N) {
            printf("Case %d: ", cas++);
            ok = 1; id = 0;
            for(i = 0; i < N; ++i) {
                scanf("%lf%lf", &x, &y);
                if(y > D) ok = 0;
                if(!ok) continue;
                d = sqrt(D * D - y * y);
                E[id].u = x - d;
                E[id++].v = x + d;
            }
    
            if(!ok) {
                printf("-1
    ");
                continue;
            }
    
            sort(E, E + id);
    
            flag = E[0].v; ans = 1;
            for(i = 1; i < N; ++i) {
                if(E[i].u <= flag) {
                    if(E[i].v <= flag) flag = E[i].v;
                    continue;
                }
                ++ans; flag = E[i].v;
            }
    
            printf("%d
    ", ans);
        }
        return 0;
    }


  • 相关阅读:
    webpack基础理解以及使用搭建
    前端优化系列之一:dns预获取 dns-prefetch 提升页面载入速度
    react 什么是虚拟DOM?深入了解虚拟DOM
    react PropTypes 与 DefaultProps
    react todolist代码优化
    react 拆分组件于组件
    react 部分语法补充
    react 的安装和案列Todolist
    浏览器的标准模式和怪异模式
    软件测试基础——慕课网
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6758699.html
Copyright © 2011-2022 走看看