#P1005. [NOIP2010普及组] 导弹拦截

题目描述

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

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

输入格式

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

输出格式

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

输入数据 1

复制代码
0 0 10 0
2
-3 3
10 0

Copy

输出数据 1

复制代码
18

Copy

输入数据 2

复制代码
0 0 6 0
5
-4 -2
-2 3
4 0
6 -2
9 1

Copy

输出数据 2

复制代码
30

Copy

提示

两个点(x_1, y_1)(x1​,y1​)、(x_2, y_2)(x2​,y2​)之间距离的平方是(x_1-x_2)^2+(y_1-y_2)^2(x1​−x2​)2+(y1​−y2​)2。

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

【样例 11说明】

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

【样例22 说明】

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

【数据范围】

对于10\%10%的数据,N = 1N=1

对于20\%20%的数据,1 ≤ N ≤ 21≤N≤2

对于40\%40%的数据,1 ≤ N ≤ 1001≤N≤100

对于70\%70%的数据,1 ≤ N ≤ 10001≤N≤1000

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

NOIP 2010 普及组 第三题

代码:

cpp 复制代码
#include<iostream>
#include<algorithm>
using namespace std;
 
const int M = 100006, inf = 10000000;
 
struct T{
	int x;
	int y;
	int a;
	int b;
}t[M];
int x_1, y_1, x_2, y_2;
int n;
 
int cmp(T a, T b){
	return a.a>b.a;
}
 
int main(){
	cin>>x_1>>y_1>>x_2>>y_2;
	cin>>n;
	for(int i = 1; i<=n; i++){
		cin>>t[i].x;
		cin>>t[i].y;
		t[i].a = (t[i].x - x_1)*(t[i].x-x_1) + (t[i].y-y_1)*(t[i].y-y_1);
		t[i].b = (t[i].x - x_2)*(t[i].x-x_2) + (t[i].y-y_2)*(t[i].y-y_2);
	}
	sort(t+1, t+n+1, cmp);
	int r2 = 0, ans = inf;
	for(int i = 1; i<=n; i++){
		r2 = max(t[i-1].b, r2);
		ans = min(ans,t[i].a+r2);
	}
	cout<<ans<<endl;
	
	return 0;
}
相关推荐
ysa051030几秒前
【板子】德州扑克模拟
c++·笔记·板子
DFT计算杂谈1 分钟前
DeepSeek 集群服务器无root本地部署指南
数据库·人工智能·python·opencv·算法
qq_454245037 分钟前
GraphFoundation — 通用图基础框架
算法·架构
慧都小项18 分钟前
C/C++ 静态分析为什么要前移?Parasoft C/C++test 在 IDE 与 CI/CD 中的应用
c语言·c++·ide·功能测试·ai
qq_33776320191 小时前
国际期货资管系统开发方案|内外盘交易平台源码授权与二次开发支持
java·c语言·开发语言·c++·c#
不一样的故事1261 小时前
军工行业合规与基础认知
数据结构·经验分享·算法
To_OC8 小时前
LC 15 三数之和:双指针不难,难的是把去重做对
javascript·算法·leetcode
renhongxia111 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
zmzb010312 小时前
C++课后习题训练记录Day157
开发语言·c++
zephyr0513 小时前
动态规划-最长上升子序列问题
算法·动态规划