2010NOIP普及组真题 3. 导弹拦截

线上OJ:

一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid=1951

核心思想:

1、我们把导弹分为区间1和区间2来看。1#拦截区间1,2#拦截区间2
2、则:1#的拦截半径为区间1最远的导弹,而2#的拦截半径为 区间2最远 的导弹。
3、所以本题可以 枚举所有区间 的可能性,并计算每种区间划分下的 r 1 2 + r 2 2 r1^2+ r2^2 r12+r22
4、最后求出极小值.
5、枚举区间之前,我们先考虑区间1包含了所有导弹,区间2一个都不包含
6、然后把 区间1 里面的导弹按照 从远到近的顺序 一个一个漏出去,每放出去一个,更新一次 r 1 2 r1^2 r12
7、区间2 则考虑 囊括漏出来的导弹,如果需要更新拦截半径才能囊括,则更新 r 2 2 r2^2 r22

假设某导弹 a[i]的坐标为(ax, ay);

1# 拦截系统坐标为(x1, y1);
2# 拦截系统坐标为(x2, y2);
则 a[i]到两个防御系统的“距离的平方和”分别为
d 1 = ( a x − x 1 ) 2 + ( a y − y 1 ) 2 d1 = (ax− x1)^2+(ay−y1)^2 d1=(axx1)2+(ayy1)2
d 2 = ( a x − x 2 ) 2 + ( a y − y 2 ) 2 d2 = (ax− x2)^2+(ay−y2)^2 d2=(axx2)2+(ayy2)2

如果a[i]是1#拦截系统的最大范围,a[j]是2#拦截系统的最大范围,(由于拦截半径的平方和就是最远导弹和拦截系统的距离的平方和),所以
1#拦截系统工作半径的平方和: r 1 2 = a [ i ] . d 1 = ( a [ i ] . x − x 1 ) 2 + ( a [ i ] . y − y 1 ) 2 r1^2 = a[i].d1 = (a[i].x− x1)^2+(a[i].y−y1)^2 r12=a[i].d1=(a[i].xx1)2+(a[i].yy1)2
2#拦截系统工作半径的平方和: r 2 2 = a [ j ] . d 2 = ( a [ j ] . x − x 1 ) 2 + ( a [ j ] . y − y 1 ) 2 r2^2 = a[j].d2 = (a[j].x− x1)^2+(a[j].y−y1)^2 r22=a[j].d2=(a[j].xx1)2+(a[j].yy1)2
故,本题所求的其实是在导弹被全覆盖情况下 a [ i ] . d 1 + a [ j ] . d 2 a[i].d1 + a[j].d2 a[i].d1+a[j].d2 的最小值。
具体理解可参见下图

在这里插入图片描述

题解代码:
#include <bits/stdc++.h>
#define INF 1e9
using namespace std;const int N = 100005;struct Node
{int d1, d2;  // d1和d2 分别记录该导弹到1#和2#拦截系统的“距离的平方和”;
};
Node a[N];  // a[i]表示第i个导弹bool cmp(Node a, Node b)  // 先根据导弹与1#拦截系统的距离进行升序排序
{return a.d1 < b.d1;
}int main()
{int x1, y1, x2, y2, n;scanf("%d %d %d %d %d", &x1, &y1, &x2, &y2, &n);for(int i = 1; i <= n; i++) // 读入每个导弹的坐标,并计算导弹与1#和2#拦截系统的“距离的平方和”{int ax, ay;scanf("%d %d", &ax, &ay);a[i].d1 = (ax - x1)*(ax - x1) + (ay - y1)*(ay - y1);a[i].d2 = (ax - x2)*(ax - x2) + (ay - y2)*(ay - y2);}sort(a + 1, a + 1 + n, cmp); // 根据导弹与1#拦截系统的距离进行升序排序// 从“1#拦截所有,2#拦截0个”开始枚举int r22 = 0;       // r22表示r2^2,记录2#拦截系统最大工作半径的平方和。由于初始2#拦截0个,所以r22初始化为0int ans = a[n].d1; // 记录 r1^2 + r2^2 的最小值。 r1^2就是a[i].d1,r2^2就是r22。由于初始时1#拦截所有,所以a[n].d1即为结果for(int i = n; i >= 1; i--) // 2#拦截系统专拦截1#的漏网之鱼,1#每漏掉一个,2#就要重新计算最大工作半径的平方和,将其包含进去。{r22 = max(r22, a[i].d2);ans = min(ans, a[i-1].d1 + r22);  // a[0].d1 = 0}printf("%d\n", ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/320005.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于 c++的模板库中的数组模板 is_array_v的测试

&#xff08;1&#xff09;该模板的源代码如下&#xff1a; template <class> // determine whether type argument is an array bool is_array_v false;template <class _Ty, size_t _Nx> bool is_array_v<_Ty[_Nx]> true;template <class _Ty>…

学习java中的interface接口

1.了解接口 java提供了一个关键字interface&#xff0c;用这个关键字我们可以定义出一个特殊的结构&#xff1a;接口 格式&#xff1a; public interface 接口名{ //成员变量&#xff08;常量&#xff09; //成员方法&#xff08;抽象方法&#xff09; } 注意&#xff1a;接…

Python——Fastapi管理平台(打包+优化)

目录 一、配置多个表 1、后端项目改造 2、导包报错——需要修改&#xff08;2个地方&#xff09; 3、启动后端&#xff08;查看是否有问题&#xff09; 4、配置前端 二、打包——成exe文件&#xff08;不包含static文件&#xff09;简单 1、后端修改 2、前端修改 3、运行打包命…

[论文笔记]Longformer: The Long-Document Transformer

引言 今天带来论文Longformer: The Long-Document Transformer的笔记。 基于Transformer的模型由于其自注意力操作而无法处理长序列&#xff0c;该操作随着序列长度呈二次扩展。为了解决这一限制&#xff0c;本篇工作提出了Longformer&#xff0c;其注意力机制随着序列长度呈…

批量邮箱API发送邮件的方法?如何使用API?

批量邮箱API发送邮件效率怎么样&#xff1f;API接口发信的优势&#xff1f; 批量发送邮件已经成为许多企业、机构或个人进行营销推广、信息传递的重要手段。然而&#xff0c;如何高效、准确地实现批量邮箱发送&#xff0c;却是许多人面临的难题。AokSend就来探讨一下利用API进…

Python基础学习之logging模块

在Python编程中&#xff0c;日志记录&#xff08;Logging&#xff09;是一个非常重要的功能。它不仅可以帮助我们追踪和调试代码中的错误&#xff0c;还可以记录程序运行时的关键信息&#xff0c;以便后续分析和优化。Python标准库中的logging模块为我们提供了强大的日志记录功…

C++从入门到精通——模板

模板 前言一、泛型编程二、函数模板函数模板的概念函数模板格式示例 函数模板的原理函数模板的实例化隐式实例化显式实例化示例 auto做模板函数的返回值模板参数的匹配原则总结 三、类模板类模板的定义格式类模板的实例化 前言 C模板是C语言中的一种泛型编程技术&#xff0c;可…

IDEA--debug

1. 单点调试的三个级别 Step into&#xff1a;在单步执行时&#xff0c;遇到子函数就进入并且继续单步执行。Step over&#xff1a;在单步执行时&#xff0c;在函数内遇到子函数时不会进入子函数内单步执行&#xff0c;而是将子函数整个执行完再停止&#xff0c;也就是把子函数…

【保姆级教程】用IDEA2023版本给RuoYi-Vue添加子模块

文章目录 前言添加子模块新建子模块新建子模块界面&#xff1f;新建子模块界面&#xff01; 修改pom依赖配置RuoYiApplication添加测试接口配置接口权限测试 前言 若依前后端分离框架能够极大方便当前开发任务&#xff0c;并且使用的技术栈也相当丰富&#xff0c;但是目前只提…

ThingsBoard通知中心讲解

1、概述 2、案例 2.1、通知发送方式 2.2、发送通知 3、Templates模板 3.1、Add new template添加新模板 1、概述 ThingsBoard 通知中心是一个用于在平台内发送、管理和自动化通知的综合工具。它允许多种通知方法&#xff0c;包括网络、电子邮件、移动应用程序、短信以及与 …

基于SpringBoot+Vue点餐系统设计和实现(源码+LW+部署讲解)

&#x1f339;作者简介&#xff1a;✌全网粉丝10W&#xff0c;前大厂员工&#xff0c;多篇互联网电商推荐系统专利&#xff0c;现有多家创业公司&#xff0c;致力于建站、运营、SEO、网赚等赛道。也是csdn特邀作者、博客专家、Java领域优质创作者&#xff0c;博客之星、掘金/华…

go mod

常用命令 初始化模块 go mod init 模块名下载 go.mod 文件中指明的所有依赖 go mod download github.com/gin-gonic/ginv1.9.(依赖路径)依赖对其&#xff08;使引用的都是所依赖的&#xff09; go mod tidy编辑go.mod go mod edit go mod edit -require"github.com/g…

哪个品牌的骨传导耳机好用?精选五大高性能热门骨传导耳机款式推荐!

我作为一名热衷于音乐的数码博主&#xff0c;在选购产品前也习惯于先浏览各种榜单。最近&#xff0c;我发现关于骨传导耳机的讨论热度极高&#xff0c;有人认为骨传导耳机是非常值得入手的新型蓝牙耳机&#xff0c;也有人认为骨传导耳机只是智商税的产品。经过深入调查后&#…

【计算机网络】FTP站点配置搭建教程以及相关问题解决方案(超详细)

文章目录 1、安装Window Server 20082、搭建FTP环境&#xff08;1&#xff09;安装FTP服务器&#xff08;2&#xff09;配置FTP服务器&#xff08;3&#xff09;测试FTP连接 3、遇到的问题以及解决方案&#xff08;1&#xff09;Windows无法访问此文件夹&#xff08;2&#xff…

Android Ant编译环境配置(Win)

1、 载ant包: 2、设置环境变量&#xff1a; 3、检查是否设置成功及版本 4、执行命令&#xff1a; android update project -p . -n “projectname”&#xff08;例如&#xff1a;android update project --target 1 -p . -n “Couplet”&#xff09;(只输入红色部分也是可以的…

AC/DC电源模块的高效能源管理与效率优化

BOSHIDA AC/DC电源模块的高效能源管理与效率优化 AC/DC电源模块是一种常见的电源转换装置&#xff0c;用于将交流电转换为直流电。它被广泛应用于各种电子设备中&#xff0c;如计算机、通信设备、工业自动化设备等。在现代化的科技社会中&#xff0c;高效能源管理和效率优化变…

swift微调多模态大语言模型

微调训练数据集指定方式的问题请教 Issue #813 modelscope/swift GitHubQwen1.5微调训练脚本中&#xff0c;我用到了--dataset new_data.jsonl 这个选项&#xff0c; 可以训练成功&#xff0c;但我看文档有提到--custom_train_dataset_path这个选项&#xff0c;这两个有什么…

​可视化大屏C位图:3D模型,可视化大屏的画龙点睛之处

Hello&#xff0c;我是大千UI工场&#xff0c;本期可视化大屏的焦点图&#xff08;C位&#xff09;分享将图表作为焦点图的情形&#xff0c;欢迎友友们关注、评论&#xff0c;如果有订单可私信。 3D模型在可视化大屏中有很大的价值&#xff0c;以下是一些相关的优点&#xff1a…

基于springboot实现在线考试系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线考试系统演示 摘要 使用旧方法对在线考试系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在在线考试系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及…

leetcode 1235

leetcode 1235 代码 class Solution { public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n startTime.size();vector<vector<int>> jobs(n);for(int i0; i<n; i){jobs[i] …