输入不是有多组数据嘛,每组数据一个输出,那不成立的情况,对于这组数据输出个-1就计算下一组数据,之前用break一直WA,改成return 0 就神奇AC了???(见代码注释处)
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const double inf = 0x3f3f3f3f;
int n,d;
struct hlt{
int x,y;
double l ,r;
bool operator <(const hlt & x)const
{
return r < x.r;
}
}q[1010];
void calc(int i,int a,int b){
double len = sqrt(d * d - b * b);
q[i].l = a - len;
q[i].r = a + len;
return;
}
int main(){
ios::sync_with_stdio(false);
while(1){
cin >> n >> d;
if(n == 0 && d == 0) break;
for(int i=1;i<=n;++i){
cin >> q[i].x >> q[i].y;
if(d < q[i].y){
cout << -1 << endl;
return 0;//蒟蒻不明白...
}
calc(i,q[i].x,q[i].y);
}
sort(q+1,q+1+n);
int cnt = 0;
double pos = -inf;
for(int i=1;i<=n;++i){
if(q[i].l > pos) {
cnt++;
pos = q[i].r;
}
else continue;
}
cout << cnt << endl;
}
return 0;
}