洛谷 P1158 导弹拦截(不是那个DP) 解题报告
P1158 导弹拦截
题目描述
经过1111年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截。当工作半径为0时,则能够拦截与它位置恰好相同的导弹。但该导弹拦截系统也存在这样的缺陷:每套系统每天只能设定一次工作半径。而当天的使用代价,就是所有系统工作半径的平方和。
某天,雷达捕捉到敌国的导弹来袭。由于该系统尚处于试验阶段,所以只有两套系统投入工作。如果现在的要求是拦截所有的导弹,请计算这一天的最小使用代价。
输入输出格式
输入格式:
第一行包含 4 4 个整数\(x_1,y_1,x_2,y_2\) ,每两个整数之间用一个空格隔开,表示这两套导弹拦截系统的坐标分别为\((x_1, y_1)\) 、\((x_2, y_2)\)。 第二行包含1个整数\(N\),表示有 \(N\)颗导弹。接下来\(N\)行,每行两个整数\(x,y\),中间用 一个空格隔开,表示一颗导弹的坐标\((x, y)\)。不同导弹的坐标可能相同。
输出格式:
一个整数,即当天的最小使用代价。
【数据范围】
对于 10% 的数据, \(N=1\)
对于 20% 的数据, \(1≤N≤2\)
对于 40% 的数据, \(1≤N≤100\)
对于 70% 的数据, \(1≤ N≤1000\)
对于 100% 的数据,\(1 ≤ N ≤ 100000\),且所有坐标分量的绝对值都不超过1000。
事实证明,并不是多做了几个省选模板的数据结构就可以让我变得强一些。这个题我想+A大概花了有一个小时左右。虽说可以说是第一次看见这样类似的题,但想这么长时间还是挺打击自信心的。
首先可能因为今晚做的一道贪心题,我先入为主胡乱打了一波贪心,还没交就被我hack掉了,但我想看看能骗多少分,还是交了上去,恩40海星了。
以为是贪心不完善,结果想了好久没办法。。
辗转画图中,我发现可以先处理一个点对所有的点的距离,然后枚举这些距离并算出另一个点要开的大小。首先排序保证单调,然后预处理另一个点。
我觉得可以理解为,通过排序使一个维度单调,然后暴力枚举令一个维度更新答案。
code:
#include <cstdio>
#include <algorithm>
int max(int x,int y){return x>y?x:y;}
int min(int x,int y){return x<y?x:y;}
const int N=100010;
const int inf=0x3f3f3f3f;
int x1,x2,y1,y2,mi1,mi2,mx[N];
struct node
{
int d1,d2;
friend bool operator <(node n1,node n2)
{
return n1.d1<n2.d1;
}
}d[N];
int get(int xk,int yk,int xl,int yl)
{
return (xk-xl)*(xk-xl)+(yk-yl)*(yk-yl);
}
int main()
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
int x,y,n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
d[i].d1=get(x1,y1,x,y);
d[i].d2=get(x2,y2,x,y);
}
std::sort(d+1,d+1+n);
for(int i=n;i>=0;i--)
mx[i]=max(mx[i+1],d[i].d2);
int ans=inf;
for(int i=0;i<=n;i++)
ans=min(ans,mx[i+1]+d[i].d1);
printf("%d\n",ans);
return 0;
}
2018.6.15
洛谷 P1158 导弹拦截(不是那个DP) 解题报告的更多相关文章
- 洛谷 P1020导弹拦截题解
洛谷链接:https://www.luogu.org/problem/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...
- 洛谷 P1020 导弹拦截(dp+最长上升子序列变形)
传送门:Problem 1020 https://www.cnblogs.com/violet-acmer/p/9852294.html 讲解此题前,先谈谈何为最长上升子序列,以及求法: 一.相关概念 ...
- codevs1044 拦截导弹==洛谷 P1020 导弹拦截
P1020 导弹拦截 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天 ...
- codevs——T1044 拦截导弹 || 洛谷——P1020 导弹拦截
http://codevs.cn/problem/1044/ || https://www.luogu.org/problem/show?pid=1020#sub 时间限制: 1 s 空间限制: 1 ...
- 洛谷 P1291 [SHOI2002]百事世界杯之旅 解题报告
P1291 [SHOI2002]百事世界杯之旅 题目描述 "--在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽 ...
- 洛谷P1020 导弹拦截【单调栈】
题目:https://www.luogu.org/problemnew/show/P1020 题意: 给定一些导弹的高度. 一个导弹系统只能拦截高度不增的一系列导弹,问如果只有一个系统最多能拦截多少导 ...
- 洛谷 [P1020] 导弹拦截 (N*logN)
首先此一眼就能看出来是一个非常基础的最长不下降子序列(LIS),其朴素的 N^2做法很简单,但如何将其优化成为N*logN? 我们不妨换一个思路,维护一个f数组,f[x]表示长度为x的LIS的最大的最 ...
- 洛谷P1020 导弹拦截
n²谁都会打,不说了. 这里讨论一下nlogn算法(单调不减): 首先开始考虑单调性,我习惯性的以为是单调队列/栈优化的那个套路,想要找到一个跟下标有关的单调性却发现没有. 例如:我想过当下标增加时f ...
- 题解-洛谷P1020P导弹拦截(求单调序列长度的优化)
https://www.luogu.org/problemnew/show/P1020 (原题链接) 第一问就是求最长不上升子序列的长度,自然就想到了c++一本通里动态规划里O(n^2)的算法,但题目 ...
随机推荐
- 通用漏洞评估方法CVSS3.0简表
CVSS3.0计算分值共有三种维度: 1. 基础度量. 分为 可利用性 及 影响度 两个子项,是漏洞评估的静态分值. 2. 时间度量. 基础维度之上结合受时间影响的三个动态分值,进而评估该漏洞的动态分 ...
- R实战 第十篇:列联表和频数表
列联表是观测数据按两个或更多属性(定性变量)分类时所列出的频数分布表,它是由两个以上的变量进行交叉分类的频数分布表.交互分类的目的是将两变量分组,然后比较各组的分布状况,以寻找变量间的关系. 按两个变 ...
- Quartz.Net分布式任务管理平台(续)
感谢@Taking园友得建议,我这边确实多做了一步上传,导致后面还需处理同步上传到其他服务器来支持分布式得操作.所有才有了上篇文章得完善. 首先看一下新的项目结构图: 这个图和上篇文章中 ...
- Lustre文件系统部署和应用探索
1. Lustre文件系统概述 2. Lustre文件系统部署 2.1 基本环境 本篇博客将在KVM虚拟机中部署Lustre文件系统. 操作系统版本为CentOS6.5_x86_64.Lustre软件 ...
- QQ群管理员申请帖(本次截止日期为2017-03-25)
本帖专门为技术交流群申请管理员专用. 管理员的权利: 1.有权在成员违规的情况下直接剔除. 2.有权加入多个交流群. 3.有权引人入群. 4.艾特全体是权利,但要慎用,通常情况下,没有我本人的授意,不 ...
- Linux下rsyslog日志收集服务环境部署记录
rsyslog 可以理解为多线程增强版的syslog. 在syslog的基础上扩展了很多其他功能,如数据库支持(MySQL.PostgreSQL.Oracle等).日志内容筛选.定义日志格式模板等.目 ...
- Nginx+Tomcat+Memcached部署
环境清单列表:(因为只有三台电脑,所有把Nginx和memcached放到一起) 应用服务器1:192.168.51.10: 应用服务器2:192.168.55.110: memcached服务器:1 ...
- Visual studio2015 编译时提示“GenerateResource”任务意外失败。
今天弄了一个winfrom程序,狗血,一直报错,在另一台电脑上就不报错. 错误如下图 其实这样也能运行,但就是代码改之后,没有办法调试.搜了很久,发现了一种解决办法,完美解决. 最终成功了.
- checkbox未选中不提交数据
如果checkbox为选中的话提交的数据为NULL function checkForm() { alert(($("#checkbox").get(0).checked)); i ...
- 自己实现数据结构系列一---ArrayList
1.先上代码: public class ArrayList<E> { private E[] data; private int size; /** * 构造方法,初始化容量capaci ...