题解
2023-03-31 21:06:38
发布于:上海
48阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
double n,w,h;
double a[10001],b[10001];
void fsort(int l,int r){
for(int i =0;i<=r;i++){
for(int j = i+1;j<=r;j++){
if(a[i] > a[j]){
swap(a[i],a[j]);
swap(b[i],b[j]);
}else if(a[i] == a[j] && b[i] < b[j] ){
swap(a[i],a[j]);
swap(b[i],b[j]);
}
}
}
}
int main(){
int m;
cin>> m;
for(int i = 0;i<m;i++){
int sum = 0,index=0;
double x,r;
cin>>n>>w>>h;
for(int j = 0;j<n;j++){
cin>>x>>r;
if(2 * r > h){
double xr = sqrt((double)(r*r - h*h/4));
a[index] = x - xr>=0?x - xr:0;
b[index] = x + xr;
index++;
}
}
fsort(0,index-1);
double begin = a[0],end= b[0];
if(begin <=0) sum++;
int k =1;
while(k<index && a[0]<=0){
if(end>=w) break;
if(k == index - 1){
sum++;
end=b[index-1];
break;
}
if(end < a[k]) break;
double max=end;
while(end >= a[k]){
max = max>b[k]?max:b[k];
k++;
}
end=max;
sum++;
}
if(end<w) sum=0;
cout<<sum<<endl;
}
return 0;
}
这里空空如也
有帮助,赞一个