思路:求区间,当两个区间重合时可共用一个雷达,求覆盖全部岛屿总共至少需要多少个雷达。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <algorithm>
#define ll long long
using namespace std;
struct node
{
double l,r;
bool operator<(const node &x)const
{
if(l==x.l)
return r<x.r;
return l<x.l;
}
}a[1005];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,r,x,y,num=1;
while(cin >> n >> r,n||r)
{
int flag=0;
for(int i=0;i<n;i++)
{
cin >> x >> y;
if(abs(y)>r)
flag=1;
else
{
double d=sqrt(r*r-y*y);
a[i].l=x-d;
a[i].r=x+d;
}
}
if(flag)
{
printf("Case %d: -1\n",num++);
continue;
}
sort(a,a+n);
int res=1;
double r=a[0].r;
for(int i=1;i<n;i++)
{
if(a[i].l>r)
{
res++;
r=a[i].r;
}
else if(a[i].r<r)
{
r=a[i].r;
}
}
printf("Case %d: %d\n",num++,res);
}
return 0;
}