题目:点击打开链接
以小岛为圆心,以给定的最大覆盖半径为圆的半径,交x轴于2点(或1点),产生一个个区间,该区间为海岸上雷达的位置范围,然后将区间排序,计算独立区间数,即为最少雷达数。。。
下面是AC代码:
#include <stdio.h>
#include <math.h>
int main()
{
int n,i,j;
int count;
int num=0;
double begin[1000+10],end[1000+10],begin_start,end_start;
double r,x,y;
while(scanf("%d %lf",&n,&r)!=EOF)
{
int flag=0;
num++;
if(n==0 && r==0) break;
for(i=0;i<n;i++)
{
scanf("%lf %lf",&x,&y);
if(y>r) {flag=1;continue;}
begin[i]=x-sqrt(r*r-y*y);
end[i]=x+sqrt(r*r-y*y);
}
if(flag==1)
{printf("Case %d: %d\n",num,-1);continue;}
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(begin[j]>begin[j+1])
{
double temp;
temp=begin[j];begin[j]=begin[j+1];begin[j+1]=temp;
temp=end[j];end[j]=end[j+1];end[j+1]=temp;
}
end_start=end[0];
count=1;
for(i=1;i<n;i++)
{
if(begin[i]>end_start)
{
count++;
end_start=end[i];
}
else if(end[i]<end_start)
{
end_start=end[i];
}
}
printf("Case %d: %d\n",num,count);
}
return 0;
}