#include<iostream>
#include<cmath>
using namespace std;
float min(float a,float b)
{
return a<b?a:b;
}
int main()
{
int n,d;
float a[1001][3];
float dis[1001][3];
int cs=0;
cin>>n>>d;
while(n!=0)
{
cs++;
if(d<=0)
{
cout<<"Case"<<cs<<": "<<-1<<endl;
cin>>n>>d;
continue;
}
int i,j;
for(i=1;i<=n;i++)
{
cin>>a[i][1]>>a[i][2];
}
//计算每个岛能接受雷达的范围
bool b=false;
for(i=1;i<=n;i++)
{
if(fabs(d)<fabs(a[i][2]))
{
cout<<"Case"<<cs<<": "<<-1<<endl;
b=true;
break;
}
dis[i][1]=a[i][1]-sqrt(pow(d,2)-pow(a[i][2],2));
dis[i][2]=a[i][1]+sqrt(pow(d,2)-pow(a[i][2],2));
}
if(b)
{
cin>>n>>d;
continue;
}
//对每一个范围按照从左到右的顺序排序
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
if(dis[j][1]<dis[i][1])
{
float temp1,temp2;
temp1=dis[i][1];
temp2=dis[i][2];
dis[i][1]=dis[j][1];
dis[i][2]=dis[j][2];
dis[j][1]=temp1;
dis[j][2]=temp2;
}
}
}
int sum=1;
float left=dis[1][1];
float right=dis[1][2];
for(i=2;i<=n;i++)
{
if(right<dis[i][1])
{
sum++;
left=dis[i][1];
right=dis[i][2];
}
else
{
left=dis[i][1];
right=min(dis[i][2],right);
}
}
cout<<"Case "<<cs<<": "<<sum<<endl;
cin>>n>>d;
}
return 0;
}
1328
最新推荐文章于 2021-04-12 18:20:45 发布