题意:已知两座炮塔的坐标,以及n个士兵的坐标,以两座炮塔A,B为圆心,R1,R2为半径,可覆盖所有士兵的坐标,求R1^2+R2^2最小值。
思路:
这道题开始的思路是:
枚举每个敌人,比较它到2个炮塔的距离,如果距离A近,则把这个距离与上个距离A近的敌人的距离比较,取较大者。反之同理处理B。这样就得到A和B炮的半径,进而得到答案。
但是这样是错的。若AB距离为20,他们中点旁有2个士兵,依据该思路得到的答案为9* 9+ 9 * 9 = 162,而如果只用A,则只需要11 * 11 = 121.所以这种思路是错误的。
靠谱的思路应该是:
将所有士兵离A的距离升序排序,然后枚举A的半径,则B的半径就是A无法覆盖的点中离B最远的距离。然后用一个变量储存中间变量距离A和B之和的最小值即可。
代码如下:
/*
*Author : Flint_x
*Created Time : 2015-05-14 12:31:03
*File name : 514j.cpp
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include