H雷达安置题解

先上题面

题目大意
这道题看着很高大上,题意其实比较简单,就是在一条直线上找到一些点,使每个岛都在它们的范围内。
思路
其实这道题只需要把二维的坐标系(x,y)转换成一维的数轴(x)就简单了,其他的就是在那些区间之中找到一些点,使每个区间都至少有一个点且点最少就可以了。
代码

我知道你们只看这里,所以我就只贴主体代码了[狗头]

    //二维转一维
    for(int i=1;i<=n;i++)
	{
		int x,y;//每个点的坐标
		cin>>x>>y;//输入
		if(y>d)//如果他的高度超过雷达能探测的范围d
		{
			cout<<-1;//不满足条件,输出-1
			return 0;//就直接结束
		}
		else if(y==d)//如果与他的高度正好相等,那么在它正下方的一定是最优解(垂线段最短)
		{
			f[i].l=x;//把雷达的范围定在x点
			f[i].r=x;//把雷达的范围定在x点
		}
		else
		{
			f[i].l=ceil(x-sqrt(d*d-y*y));//否则用勾股定理求出雷达范围
			f[i].r=floor(x+sqrt(d*d-y*y));//否则用勾股定理求出雷达范围
		}
	}
    不可以复制哦

下面的就比较简单了,代码我就不贴了。

2023.7.14 16:05更新

7 个赞

其实它没有-1的点,所以你不用判断(bushi

4 个赞

666

2 个赞

image
这是重点

2 个赞

题里提了,还是写上吧(主要是为了讲题,不是做题嘛)

7 个赞

为什么要向上,向下取整

2 个赞