• Radar Installation


    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<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    struct node
    {
    	double zuo,you;
    }lei[2001];
    bool cmp(node a,node b)
    {
    	return a.zuo  <b.zuo  ;
    }
    int main()
    {
         int d,n,cut=0;
    	while(scanf("%d%d",&n,&d)!=EOF)
    	{
    		if(n==0 && d==0)
                break;
            int x,y;
            double tmp;
            int flag=0;
            for(int i=0;i<n;i++){
                scanf("%d%d",&x,&y);
                tmp=sqrt((double)(d*d)-y*y);
                lei[i].zuo=x-tmp;
                lei[i].you=x+tmp;//求出每个岛能被扫到的雷达所在区间  
                if(y>d)
                    flag=1;
            }	
    		 	if(flag)
    		 	{
    		 			printf("Case %d: -1
    ",++cut);
    		 			continue;
    			 }
    		sort(lei,lei+n,cmp);
    		int sum=1;
    		node  qian= lei[0];
    		for(int i=1;i<n;i++)
    		{
    				 if( qian.you  < lei[i].zuo  )
    			         {    
    					     sum++;
    			         	qian=lei[i] ;
    		 	         }
    			         else
    			         {
    			         	    if(lei[i].you<=qian.you )
    			               {
    			          	      qian=lei[i] ;
    						    }
    					 }
    			  }
    				printf("Case %d: %d
    ",++cut,sum);
    	 } 
    	return 0;
    }

  • 相关阅读:
    windows下python3.6环境搭建
    接口自动化(2)----如何编写接口自动化用例
    关于接口自动化测试的规则说明
    linux 常用命令 补充
    linux 常用命令
    linux 初识
    java高级教程 JDK代理和CGLIB代理两种方式 账户类
    java高级教程 实例化和非实例化 bean 学生信息
    java高级教程 俩数之和
    C++使用printf输出string类
  • 原文地址:https://www.cnblogs.com/kingjordan/p/12027143.html
Copyright © 2020-2023  润新知