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 is terminated by a line containing pair of zeros
Output
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<iostream>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
struct node{
double x;
double y;
}p[1001];
bool cmp(node a,node b)
{
return a.x<b.x;
}
int main()
{
int k,n,r,x,y,i,j;
int t=1;
while(cin>>n>>r&&n!=0&&r!=0)
{
int flag=0;
int count=1;
double s;
for(i=0;i<n;i++)
{
cin>>x>>y;
if(r<y)
flag=1;
s=sqrt(r*r-y*y);
p[i].x=x-s;
p[i].y=x+s;
}
printf("Case %d: ",t++);
if(flag==1)
{
printf("-1\n");
continue;
}
sort(p,p+n,cmp);
s=p[0].y;
for(i=0;i<n;i++)
{
if(p[i].x>s)
{
count++;
s=p[i].y;
}
else
{
if(p[i].y<s)
{
s=p[i].y;
}
}
}
cout<<count<<endl;
}
return 0;
}