#include <iostream> #include <cmath> #include <cstdio> #include <cstring> #include <string> #include <map> #include <iomanip> #include <algorithm> #include <queue> #include <stack> #include <set> #include <vector> //const int maxn = 1e5+5; #define ll long long #define MAX INT_MAX #define FOR(i,a,b) for( int i = a;i <= b;++i) using namespace std; struct node { double x,y,l,r; }v[1100]; bool cmp(node a,node b) { return a.l<b.l; } int n,d,ans,k; int hhh; double dl,dr; int main() { while(scanf("%d %d",&n,&d)&&n&&d) { hhh=0; k++; memset(v,0,sizeof(v) ); ans=0; FOR(i,1,n) { cin>>v[i].x>>v[i].y; if(v[i].y>d) { hhh=1; } } if(hhh==1) { printf("Case %d: -1\n", k); } else { FOR(i,1,n) { v[i].l=v[i].x-sqrt(d*d-v[i].y*v[i].y); v[i].r=v[i].x+sqrt(d*d-v[i].y*v[i].y); } sort(v+1,v+n+1,cmp); double dl=v[1].l,dr=v[1].r; ans=1; for(int i=2;i<=n;++i) { if(v[i].l>dr) //可以覆盖这个点 { // dr=max(v[i].r,dr); dr=v[i].r; ans++; } else if(v[i].r<dr) { dr=v[i].r; } } printf("Case %d: %d\n", k,ans); } } /*FOR(i,1,n) { cout<<v[i].l<<" "<<v[i].r<<endl; }*/ }
原文:https://www.cnblogs.com/jrfr/p/10473293.html