NOIP2010普及组 导弹拦截(重庆一中高2018级信息学竞赛测验3) 解题报告

本文介绍了NOIP2010普及组的一道竞赛题目——导弹拦截,分析了初次尝试的错误解法和最终的正确解法。错误解法过于复杂,导致计算问题;正确解法通过定义结构体存储导弹坐标和距离平方和,按顺序枚举导弹,优化第二个系统的工作半径,从而求得最小代价。
摘要由CSDN通过智能技术生成

做题思路(错解):刚拿到这道题时,想得过于复杂,用了两个不同的结构体来存导弹的坐标和导弹到系统的距离的平方和,在存平方和时还把导弹的到两个系统的距离分开存了,本来是想按导弹到系统的距离的平方和由小到大排序来计算最小代价,用下标和是到哪个系统的标记来控制不选择重复的导弹,结果发现在计算最小代价时特殊情况太多,并且对于一些数据仍有问题。


解题思路(正解):根据题意,我们可以只定义一个结构体存每个导弹的坐标和到两个系统的距离的平方和。先按照导弹到第一个系统的距离的平方和由小到大排序,从到第一个系统距离最大的导弹开始,枚举第i个导弹时,先将第i+1个导弹(到第一个系统距离比第i个导弹远)交给第二个系统拦截,更新第二个系统的工作半径,然后答案从已有答案和当前第二个系统的工作半径加上第i个导弹到第一个系统距离的平方和(第一个系统的工作半径)取最小值。


#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=100005;
co
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值