#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;
}
相关推荐
HAH-HAH13 小时前
【蓝桥杯 2024 国 Java A】粉刷匠小蓝
c++·学习·数学·算法·职场和发展·蓝桥杯·组合数学
小吴同学·13 小时前
OPC Client第10讲:实现主界面;获取初始界面传来的所有配置信息config【C++读写Excel:xlnx;ODBC;缓冲区】
c++·wxwidgets
边疆.13 小时前
【C++】继承详解
开发语言·c++·继承
hweiyu0014 小时前
C++设计模式,高级开发,算法原理实战,系统设计与实战(视频教程)
c++·算法·设计模式
大千AI助手14 小时前
粒子群优化(PSO)算法详解:从鸟群行为到强大优化工具
人工智能·算法·优化算法·pso·粒子群优化
十年编程老舅14 小时前
‌C++左值与右值:从基础概念到核心应用‌
linux·c++·右值引用·c++17·c++左值·c++右值·左值引用
John_ToDebug14 小时前
Chrome性能黑魔法:深入浅出PGO优化与实战指南
c++·chrome
我叫汪枫14 小时前
C语言深度入门系列:第十一篇 - 动态内存管理与数据结构:程序世界的高效算法大师
c语言·数据结构·算法
Li_76953215 小时前
优选算法100 题 ——1 双指针
算法
77qqqiqi15 小时前
算法——数学基础
算法