题目地址:http://poj.org/problem?id=1328
个人小结:先求出能灌溉岛屿的圆心范围(在X轴的),然后进行区间覆盖。
解析参考地址 :http://blog.csdn.net/xxm137164869/article/details/6503672
源代码:
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct N
{
double x1,x2;
}a[1005];
bool cmp(struct N a,struct N b)
{
return a.x1-b.x1<10e-7;
}
int main()
{
int i,j,k;
int m,n;
int d;
static int t=0;
while(cin>>n>>d)
{
if(n==0&&d==0) break;
int num1,num2;
bool flag=true;
for(i=0;i<n;i++)
{
cin>>num1>>num2;
if(flag)
{
if(num2>d) flag=false;
double mid=sqrt((d*d-num2*num2)*1.0);
a[i].x1=num1-mid;
a[i].x2=num1+mid;
}
}
t++;
if(!flag)
{
cout<<"Case "<<t<<": "<<"-1"<<endl;
continue;
}
sort(a,a+n,cmp);
int sum=1;
double temp=a[0].x2;
for(i=1;i<n;i++)
{
if(a[i].x1-temp>10e-7)
{
sum++;
temp=a[i].x2;
}
else
{
if(a[i].x2-temp<10e-7)
{
temp=a[i].x2;
}
}
}
cout<<"Case "<<t<<": "<<sum<<endl;
}
return 0;
}