news 2026/4/17 14:40:12

P1158 导弹拦截【洛谷算法习题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
P1158 导弹拦截【洛谷算法习题】

P1158 导弹拦截

网页链接

P1158 导弹拦截

题目描述

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

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

输入格式

第一行包含4 44个整数x 1 , y 1 , x 2 , y 2 x_1,y_1,x_2,y_2x1,y1,x2,y2,每两个整数之间用一个空格隔开,表示这两套导弹拦截系统的坐标分别为( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1), (x_2,y_2)(x1,y1),(x2,y2)。第二行包含1 11个整数N NN,表示有N NN颗导弹。接下来N NN行,每行两个整数x , y x,yx,y,中间用一个空格隔开,表示一颗导弹的坐标( x , y ) (x,y)(x,y)。不同导弹的坐标可能相同。

输出格式

一个整数,即当天的最小使用代价。

输入输出样例 #1

输入 #1

0 0 10 0 2 -3 3 10 0

输出 #1

18

输入输出样例 #2

输入 #2

0 0 6 0 5 -4 -2 -2 3 4 0 6 -2 9 1

输出 #2

30

说明/提示

两个点( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2)(x1,y1),(x2,y2)之间距离的平方是( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 (x_1-x_2)^2+(y_1-y_2)^2(x1x2)2+(y1y2)2

两套系统工作半径r 1 , r 2 r_1,r_2r1,r2的平方和,是指r 1 , r 2 r_1,r_2r1,r2分别取平方后再求和,即r 1 2 + r 2 2 r_1^2+r_2^2r12+r22

样例 1 说明

样例1 11中要拦截所有导弹,在满足最小使用代价的前提下,两套系统工作半径的平方分别为18 18180 00

样例 2 说明

样例2 22中的导弹拦截系统和导弹所在的位置如下图所示。要拦截所有导弹,在满足最小使用代价的前提下,两套系统工作半径的平方分别为20 202010 1010

【数据范围】。

  • 对于10 % 10\%10%的数据,N = 1 N=1N=1
  • 对于20 % 20\%20%的数据,1 ≤ N ≤ 2 1\le N\le 21N2
  • 对于40 % 40\%40%的数据,1 ≤ N ≤ 100 1\le N\le 1001N100
  • 对于70 % 70\%70%的数据,1 ≤ N ≤ 1000 1\le N\le 10001N1000
  • 对于100 % 100\%100%的数据,1 ≤ N ≤ 10 5 1\le N\le 10^51N105,且所有坐标分量的绝对值都不超过1000 10001000

NOIP2010 普及组 第三题

解题思路

本题核心是排序+贪心枚举求解两套导弹拦截系统的最小代价。题目要求拦截所有导弹,代价为两套系统半径的平方和,因此无需开根号,直接计算距离平方规避浮点误差。先算出每枚导弹到两个系统的距离平方,将导弹按到系统1的距离平方升序排序。枚举分界点:系统1覆盖前i枚导弹,半径取第i枚的距离平方;剩余导弹由系统2覆盖,半径取剩余导弹的最大距离平方。遍历所有分界点计算平方和最小值,同时考虑全由系统2覆盖的边界情况。算法时间复杂度O ( N log ⁡ N ) O(N\log N)O(NlogN),完美适配N ≤ 10 5 N≤10^5N105的大数据规模。

总结

核心逻辑:按导弹到系统1的距离排序,枚举系统1的覆盖范围,系统2兜底剩余导弹,求半径平方和最小值。
关键操作:计算距离平方、排序导弹、逆序遍历维护系统2最大半径、枚举最优解。
效率保障:排序+线性遍历,无浮点运算,高效处理十万级数据量。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=2e5+10;constll p=1e9+7;constll INF=1e18;constll M=1e6+10;structstu{ll x,y,dis1,dis2;}d[N];ll a1,b1,a2,b2,n,x,y,ans,cnt;lldist(ll a1,ll b1,ll a2,ll b2){returnpow(a1-a2,2)+pow(b1-b2,2);}boolcmp(stu a,stu b){returna.dis1<b.dis1;}intmain(){ll a1,b1,a2,b2,n;cin>>a1>>b1>>a2>>b2>>n;for(ll i=1;i<=n;i++){cin>>d[i].x>>d[i].y;d[i].dis1=dist(d[i].x,d[i].y,a1,b1);d[i].dis2=dist(d[i].x,d[i].y,a2,b2);}sort(d+1,d+1+n,cmp);ll ans=d[n].dis1;ll cnt=0;for(ll i=n;i>=1;i--){ans=min(ans,cnt+d[i].dis1);cnt=max(cnt,d[i].dis2);}ans=min(ans,cnt);cout<<ans<<endl;return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 14:35:24

谷歌最新算法有哪些更改?8成AI洗稿站阵亡,流量归零实录

3月5日凌晨&#xff0c;全球最大站长论坛WebmasterWorld的某个子版块涌入4000多条英文求救长帖。一个建立仅2个月、日均访客曾稳定在12万的英语宠物资讯站&#xff0c;24小时内日活掉落至7人。网站服务器后台抓取日志显示&#xff0c;谷歌爬虫的造访频次从每天8.5万次直线掉落到…

作者头像 李华
网站建设 2026/4/17 14:32:50

树莓派Zero网络升级指南:低成本搞定RTL8153千兆网卡(附避坑技巧)

树莓派Zero网络性能升级实战&#xff1a;RTL8153千兆网卡配置与优化全攻略 树莓派Zero凭借其小巧的体积和低廉的价格&#xff0c;在物联网、边缘计算等领域广受欢迎。然而&#xff0c;其内置的百兆网络接口往往成为性能瓶颈&#xff0c;尤其是在需要频繁数据传输的场景下。本文…

作者头像 李华
网站建设 2026/4/17 14:31:16

域名防红跳转系统源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 本源码是防止系统检测的&#xff0c;目的是防红&#xff0c;需要你的域名是还没有红的状态&#xff0c;页面挺美观的 测试环境&#xff1a;PHP 安卓微信打开直接会自动提示跳转浏览器&#xff0c;苹果端会…

作者头像 李华
网站建设 2026/4/17 14:30:15

微服务1:从单体到微服务:一文看懂服务架构的演变之路

在软件开发的世界里&#xff0c;架构的选择如同为建筑打下地基&#xff0c;直接影响着系统的稳定性、扩展性和维护效率。随着业务规模的不断扩大&#xff0c;我们的架构也在不断演进。今天&#xff0c;我们就来聊聊服务架构的三次重要飞跃&#xff1a;从单体架构&#xff0c;到…

作者头像 李华