zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    Process finished with exit code -1073740791 (0xC0000409)
    Dispersion
    Change of Variables Theorem 变量变换定理
    pycharm下使用matpltlib绘图复用figure无法更新画布问题
    matlab绘图充满图窗
    win10系统复制 粘贴功能失效
    matlab遍历文件夹
    matlab更改legend中marker的大小
    win10复制粘贴问题
    Pytorch转置卷积具体计算过程
  • 原文地址:https://www.cnblogs.com/kingjordan/p/12027143.html
Copyright © 2011-2022 走看看