//主要是以岛为圆心画圆求区间,还有就是区间交并的问题
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int n,d,cas;
struct node{
double x,y;
double l,r;
}p[1009];
bool cmp(node a,node b){
//if(fabs(a.l-b.l)<1e8) return a.r<b.r;
return a.l<b.l;
}
int main(){
while(scanf("%d%d",&n,&d)){
if(!(n+d)) return 0;
double mx=0;
for(int i=0;i<n;i++){
scanf("%lf%lf",&p[i].x,&p[i].y);
mx=max(mx,p[i].y);
}
if(mx>d){
printf("Case %d: -1\n",++cas);
continue;
}
for(int i=0;i<n;i++){
p[i].l=p[i].x-sqrt(d*d-p[i].y*p[i].y);
p[i].r=p[i].x+sqrt(d*d-p[i].y*p[i].y);
}
sort(p,p+n,cmp);
int cnt=1;
double r=p[0].r;
for(int i=1;i<n;i++){
if(p[i].l>r){
cnt++;r=p[i].r;
}
else if(p[i].r<r)//不能反了,否则i这点有可能没覆盖到
r=p[i].r;
}
printf("Case %d: %d\n",++cas,cnt);
}
return 0;
}
POJ1328 radar installation (Greedy)
最新推荐文章于 2015-10-13 19:15:00 发布