#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;
}
相关推荐
oioihoii11 分钟前
回归测试:软件演进中的质量守护神与实践全指南
c++
菜鸟233号41 分钟前
力扣213 打家劫舍II java实现
java·数据结构·算法·leetcode
十五年专注C++开发1 小时前
CMake基础: 在release模式下生成调试信息的方法
linux·c++·windows·cmake·跨平台构建
狐571 小时前
2026-01-18-LeetCode刷题笔记-1895-最大的幻方
笔记·算法·leetcode
点云SLAM1 小时前
C++(C++17/20)最佳工厂写法和SLAM应用综合示例
开发语言·c++·设计模式·c++实战·注册工厂模式·c++大工程系统
Q741_1471 小时前
C++ 队列 宽度优先搜索 BFS 力扣 662. 二叉树最大宽度 每日一题
c++·算法·leetcode·bfs·宽度优先
Pluchon1 小时前
硅基计划4.0 算法 动态规划进阶
java·数据结构·算法·动态规划
csdn_aspnet1 小时前
C++跨平台开发:工程难题与解决方案深度解析
c++
余衫马2 小时前
在Win10下编译 Poppler
c++·windows·qt·pdf·poppler
王老师青少年编程2 小时前
2024年3月GESP真题及题解(C++七级): 俄罗斯方块
c++·题解·真题·gesp·csp·俄罗斯方块·七级