题解
2024-08-16 17:23:19
发布于:湖南
29阅读
0回复
0点赞
虽然用两个double记录不太严谨,但是也找不到更好的办法了
#include <cjdst.h>
using namespace std;
struct node{
double l, r;//l记录最左边能够到的值,r记录最右边能够到的值
bool operator < (const node &b) const{
return r < b.r;
}
}a[1005];
int n, m, x, y;
int main(){
n = read(), m = read();
for(int i = 1; i <= n; i++){
x = read(), y = read();
if(m < y){//如果y坐标超过雷达那么就扫描不到了
cout << -1;
return 0;
}
a[i].l = x - sqrt(m * m - y * y), a[i].r = x + sqrt(m * m - y * y);
}
sort(a + 1, a + n + 1);
int ct = 1;
double cur = a[1].r;
for(int i = 2; i <= n; i++){
if(a[i].l > cur){//如果不在范围之内
ct++, cur = a[i].r;//新开一个雷达
}
}
cout << ct;
return 0;
}
这里空空如也
有帮助,赞一个