#10002. 「一本通 1.1 例 3」喷水装置 (题目链接)
大意: 给出一个矩形花园,在中轴线上有一些洒水器,问最少开几个洒水器就可以覆盖整个花园。
勾股定理求一下有效区间,然后按区间 L 端sort,谈心最右可达距离。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e4;
const double mif = 0.0001;
pair<double,double> p[maxn];
double L,W;
int n,cnt;
int main(){
int _;scanf("%d",&_);
while(_--){
scanf("%d%lf%lf",&n,&L,&W);
cnt = 0;
memset(p,.0,sizeof(p));
double a,b,tt;
for(int i=0;i<n;++i){
scanf("%lf%lf",&a,&b);
if(b<W/2) continue;
tt = sqrt(b*b-W*W/4.);
p[cnt].first = a-tt;
p[cnt++].second = a+tt;
}
sort(p,p+cnt);
double an = .0;
int ans = 0;
for(int i=0;i<cnt;++i){
double ant = 0;
int j=i;
while(an>p[j].first&&j<cnt){
ant = max(ant,p[j].second);
j++;
}
if(j!=i){
an = ant;
ans++;
i = j-1;
}
if(an>=L||(!ant&&an<L)) break;
}
if(L>an) printf("-1\n");
else printf("%d\n",ans);
}
return 0;
}