博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
导弹拦截(不是最长不上升子序列)
阅读量:5343 次
发布时间:2019-06-15

本文共 1000 字,大约阅读时间需要 3 分钟。

一道看似暴力枚举实则就是暴力枚举(加点贪心)的题

题目:

经过 1111年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截。当工作半径为 00时,则能够拦截与它位置恰好相同的导弹。但该导弹拦截系统也存在这样的缺陷:每套系统每天只能设定一次工作半径。而当天的使用代价,就是所有系统工作半径的平方和。

某天,雷达捕捉到敌国的导弹来袭。由于该系统尚处于试验阶段,所以只有两套系统投入工作。如果现在的要求是拦截所有的导弹,请计算这一天的最小使用代价。

最大数据范围:

对于100%的数据,1≤N≤100000,且所有坐标分量的绝对值都不超过1000。

 

 

首先,看到题目与数据范围可知,可直接保存坐标差的平方和,(就是两点距离公式的平方),不会爆炸,而且只需保存与两个拦截系统的距离,无需保存坐标。

其次考虑算法问题,如果单纯考虑某点与该两点距离远近比较,也就是考虑这个导弹离谁近就用哪个的话,并不保证正确性

因为也许某个导弹离点2较近,但点1的拦截距离已经可以囊括该导弹,就无需更新点2拦截范围

不妨考虑以下思路,

按照对于第一套拦截系统的距离排序,以保证第一套系统拦截范围为第k个点距离时,能够拦截到前k个点,因为前k个点距离要更短

然后在枚举以上内容过程中处理该点到第二个拦截点的距离,取最大,否则无法拦截到所有点

代码:

#include
using namespace std;int n;struct node{ int df,ds; node(){ df=0; ds=0; }}nd[100005];struct al{ int x,y;}fi,sc;inline bool cmp(const node &a,const node &b){ return a.df
=1){ maxn=max(maxn,nd[i+1].ds); ans=min(nd[i].df+maxn,ans); i--; }printf("%d\n",ans); return 0;}

 

转载于:https://www.cnblogs.com/648-233/p/11030952.html

你可能感兴趣的文章
前端笔记-bom
查看>>
上海淮海中路上苹果旗舰店门口欲砸一台IMAC电脑维权
查看>>
Google透露Android Market恶意程序扫描服务
查看>>
给mysql数据库字段值拼接前缀或后缀。 concat()函数
查看>>
迷宫问题
查看>>
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
Code Snippet
查看>>
zoj 1232 Adventure of Super Mario
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
oracle job
查看>>
Redis常用命令
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>