• poj 1328 Radar Installation【贪心区间选点】


    Radar Installation

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Other)
    Total Submission(s) : 22   Accepted Submission(s) : 9
    Problem 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
     
    题解:先计算出可以覆盖小岛的区间,然后将这些区间按照区间右端从小到大排序,找出是否有重复区间
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    #define MAX 11000
    struct node
    {
    	double beg;
    	double end;
    }s[MAX];
    bool cmp(node a,node b)
    {
    	return a.beg<b.end;
    }
    int main()
    {
    	int i,j;
    	int island,r;
    	double a,b;
    	int k=0;
        while(scanf("%d%d",&island,&r)&&island!=0&&r!=0)
        {
        	int ok=0;
        	for(i=0;i<island;i++)
        	{
        		scanf("%lf%lf",&a,&b);
        		if(fabs(b)>r)
        		{
        			ok=1;
        			break;
        		}
                s[i].beg=a-sqrt(r*r-b*b);//区间左端 
                s[i].end=a+sqrt(r*r-b*b);//区间右端 
        	}
        	if(ok)
        	{
        		printf("-1
    ");
        		continue;
        	}
        	sort(s,s+island,cmp);
        	int sum=0;
        	double ans=-11000.0;
            for(i=0;i<island;i++)
            {
            	if(ans<s[i].beg)
            	{
            		ans=s[i].end;
            		sum++;
            	}
            }
            printf("Case %d: ",++k);
            printf("%d
    ",sum);
        }
    	return 0;
    }
    

      

  • 相关阅读:
    搭建非域AlwaysOn win2016+SQL2016
    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
    四、基于Windows 2012配置SQL Server 2014 AlwaysOn
    三、安装SQLserver 2014(For AlwaysOn)
    二、 Windows 2012配置故障转移(For SQLServer 2014 AlwaysOn)
    Mybatis-SQL语句构建器类及日志
    Mybatis-JavaAPI
  • 原文地址:https://www.cnblogs.com/tonghao/p/4692575.html
Copyright © 2020-2023  润新知