做题思路(错解):刚拿到这道题时,想得过于复杂,用了两个不同的结构体来存导弹的坐标和导弹到系统的距离的平方和,在存平方和时还把导弹的到两个系统的距离分开存了,本来是想按导弹到系统的距离的平方和由小到大排序来计算最小代价,用下标和是到哪个系统的标记来控制不选择重复的导弹,结果发现在计算最小代价时特殊情况太多,并且对于一些数据仍有问题。
解题思路(正解):根据题意,我们可以只定义一个结构体存每个导弹的坐标和到两个系统的距离的平方和。先按照导弹到第一个系统的距离的平方和由小到大排序,从到第一个系统距离最大的导弹开始,枚举第i个导弹时,先将第i+1个导弹(到第一个系统距离比第i个导弹远)交给第二个系统拦截,更新第二个系统的工作半径,然后答案从已有答案和当前第二个系统的工作半径加上第i个导弹到第一个系统距离的平方和(第一个系统的工作半径)取最小值。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=100005;
co