题目如下:
Problem Description
Input
第一行包含一个数T,表示测试样例的个数。
在每个测试样例的第一行有二个整数n(1≤n≤1000)和d,分别表示小岛的个数和雷达能探测的最远距离。接下来有n行,每行两个整数,表示第i个小岛的坐标。
Output
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<fstream>
using namespace std ;
struct mid
{
double l, r ;
}
id[1010] ;
int comp(const void *a,const void *b)
{
return (*(mid *)a).l < (*(mid *)b).l ? -1 : 1 ;
}
int main()
{
int n, d, i, count ;
double x, y, current ;
bool b ;
int t;
cin>>t;
for(int i=0;i<t;i++)
{
cin >> n >> d ;
if(n==0&&d==0) break ;
b = true ;
for(i=0; i<n; i++)
{
cin >> x >> y ;
if(d<y) b = false ;
else
{
id[i].l = x - sqrt(1.0*d*d-y*y) ;
id[i].r = x + sqrt(1.0*d*d-y*y) ;
}
}
if(d<=0||!b)
{
cout << -1 << endl ;
continue ;
}
if(n==1)
{
cout << 1 << endl ;
continue ;
}
qsort(id, n, sizeof(id[0]), comp) ;
count = 1 ;
current = id[0].r ;
for(i=1; i<n; i++)
{
if(id[i].l>current)
{
count ++ ;
current = id[i].r ;
}
else
{
if(id[i].r<current) current = id[i].r ;
}
}
cout<< count << endl ;
}
return 0 ;
}