这个代码只是固定位置1个雷达安装位置所求的,若要动态确定雷达安装位置计算,要在此代码基础上修改即可。这个题目可用一维数组处理,把X作为数组下标判断当Y大与数组值时替换即可表示X和Y,这样就不用创建类数组也不用排序。
void 雷达安装问题()
{//缘由https://bbs.csdn.net/topics/396522250
int xy[47]{}, j = 0, x = 0, y = 0, N = 0, D = 0, LD = 1;
cin >> N >> D; j = N;
while (j)cin >> x >> y, (xy[x] < y ? xy[x] = y : 0), --j;
x = 0; y = D;//雷达Y=0就不做减法了X=D雷达半径。圆的点坐标Y对应最大等于半径,若小等于半径都在圆内,因此判断Y小等于半径可断其在圆内。
while (++x <= N)if (xy[x])if (pow(xy[x], 2) + pow((x - y), 2)>pow(D, 2)) ++LD; else; else;
cout << LD;//动态设置雷达位置的算法:先以D为位置求D位置前面是否满足,若不满足这往前移,如是推求到1止;往后移动D位置,求法如前,直至N。
}
由于数据4 3超过3 0雷达,6 2也超过,因此输出为3,修改一下数据就能体现为2。