代码如下:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cstdlib>
#include <vector>
#define ll long long
#define maxn 1010
using namespace std;
double x[maxn], y[maxn];
int main()
{
int n, d, a, b, w = 1;
while ( ~scanf( "%d%d", &n, &d) && ( d || n)){
bool fg = false;
for ( int i = 0; i < n; i++){
scanf( "%d%d", &a, &b);
if ( b > d || b < 0)
fg = true;
if ( !fg){
x[i] = a - sqrt( 1.0 * d * d - b * b);
y[i] = a + sqrt( 1.0 * d * d - b * b);
}
}
printf( "Case %d: ", w++);
if ( fg){
printf( "-1\n");
}
else{
for ( int i = 0; i < n - 1; i++){
int k = i;
for ( int j = i + 1; j < n; j++){
if ( y[k] - y[j] > 1e-8){
k = j;
}
else if ( fabs( y[j] - y[k]) < 1e-8 && x[j] - x[k] > 1e-8){
k = j;
}
}
if ( k != i){
swap( x[i], x[k]);
swap( y[i], y[k]);
}
}
double z = y[0];
int c = 1;
for ( int i = 1; i < n; i++){
if ( x[i] - z > 1e-8){
z = y[i];
c++;
}
}
printf( "%d\n", c);
}
}
return 0;
}