题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=287
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <climits>
using namespace std;
const int MAXN = 1010;
int main()
{
int n, r, i, kcase = 1;
pair <double , double> Radar[MAXN];
double x, y;
while(~scanf("%d %d", &n, &r) && (n+r))
{
bool flag = false;
for(i = 0; i < n; ++i)
{
scanf("%lf %lf", &x, &y);
if(fabs(y) > r)
{
flag = true;
break;
}
Radar[i].first = x + sqrt(r*r - y*y);
Radar[i].second = x - sqrt(r*r - y*y);
}
if(flag)
{
printf("Case %d: -1\n", kcase++);
continue ;
}
sort(Radar, Radar+n);
double t = Radar[0].first;
int ans = 1;
for(i = 1; i < n; ++i)
{
if(t < Radar[i].second)
{
ans++;
t = Radar[i].first;
}
}
printf("Case %d: %d\n", kcase++, ans);
}
return 0;
}