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) 解题报告的更多相关文章

  1. 洛谷 P1020导弹拦截题解

    洛谷链接:https://www.luogu.org/problem/P1020 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到 ...

  2. 洛谷 P1020 导弹拦截(dp+最长上升子序列变形)

    传送门:Problem 1020 https://www.cnblogs.com/violet-acmer/p/9852294.html 讲解此题前,先谈谈何为最长上升子序列,以及求法: 一.相关概念 ...

  3. codevs1044 拦截导弹==洛谷 P1020 导弹拦截

    P1020 导弹拦截 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天 ...

  4. codevs——T1044 拦截导弹 || 洛谷——P1020 导弹拦截

    http://codevs.cn/problem/1044/ || https://www.luogu.org/problem/show?pid=1020#sub 时间限制: 1 s  空间限制: 1 ...

  5. 洛谷 P1291 [SHOI2002]百事世界杯之旅 解题报告

    P1291 [SHOI2002]百事世界杯之旅 题目描述 "--在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽 ...

  6. 洛谷P1020 导弹拦截【单调栈】

    题目:https://www.luogu.org/problemnew/show/P1020 题意: 给定一些导弹的高度. 一个导弹系统只能拦截高度不增的一系列导弹,问如果只有一个系统最多能拦截多少导 ...

  7. 洛谷 [P1020] 导弹拦截 (N*logN)

    首先此一眼就能看出来是一个非常基础的最长不下降子序列(LIS),其朴素的 N^2做法很简单,但如何将其优化成为N*logN? 我们不妨换一个思路,维护一个f数组,f[x]表示长度为x的LIS的最大的最 ...

  8. 洛谷P1020 导弹拦截

    n²谁都会打,不说了. 这里讨论一下nlogn算法(单调不减): 首先开始考虑单调性,我习惯性的以为是单调队列/栈优化的那个套路,想要找到一个跟下标有关的单调性却发现没有. 例如:我想过当下标增加时f ...

  9. 题解-洛谷P1020P导弹拦截(求单调序列长度的优化)

    https://www.luogu.org/problemnew/show/P1020 (原题链接) 第一问就是求最长不上升子序列的长度,自然就想到了c++一本通里动态规划里O(n^2)的算法,但题目 ...

随机推荐

  1. [python][spark]wholeTextFiles 读入多个文件的例子

    $pwd /home/training/mydir $cat file1.json {"firstName":"Fred", "lastName&qu ...

  2. 洛谷 P4409 [ZJOI2006] 皇帝的烦恼

    题目链接-> OVO 题解: 很久没有写博客了,可能是因为最近太颓废了吧. 刚刚考完期末考试,无比期盼早点外出学习,不要面对成绩,害怕. #include <cstdio> #inc ...

  3. cmd命令入门

    第一类: 介绍原生的DOS 首先在cmd命令输入help,看到如下图的结果,这里展示的原生的DOS命令. 这里列出了一些命令,可以自己试试的玩.一般看到一个命令后,如果没有说明文档,你就尝试的在其命令 ...

  4. SNMP基础知识

    注:本篇博客并非原创,仅是学习笔记 1. 概述1.1 诞生背景1.2 SNMP简介1.3 版本1.4 术语1.5 网络结构1.6 MIB简介2. Linux的SNMP安装 1. 概述 1.1 诞生背景 ...

  5. ceph学习

    网络: ceph必须要有公共网络和集群网络: public network:负责客户端交互以及osd与mon之间的通讯 cluster network:负责osd之间的复制,均衡,回填,数据恢复等操作 ...

  6. 跨平台、跨语言应用开发,Elements 介绍

    目录 1,Elements 介绍 2,Elements 版本 3,Elements 能干嘛 4,Elements  IDES 5,Elements 工具 1,Elements 介绍 RemObject ...

  7. phpstorm 报错及解决

    1. 当项目里有大量 js 文件时,一旦编辑包含 js 的文件,phpstorm 会卡顿,甚至未响应 问题原因: 内存限制较小 解决方法一: 直接将弹出框中的红色部分修改为需要的内存限制,并选择 Sh ...

  8. java注解XML

    用的是jdk自带的javax.xml.bind.JAXBContext将对象和xml字符串进行相互转换. 比较常用的几个: @XmlRootElement:根节点 @XmlAttribute:该属性作 ...

  9. Linux内核及分析 第一周 计算机是如何工作的?

    C语言代码: int g(int x) { return x + 5; } int f(int x) { return g(x); } int main(void) { return f(5) + 1 ...

  10. 转帖--计算机网络基础知识大总汇 https://www.jianshu.com/p/674fb7ec1e2c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    计算机网络基础知识大总汇 龙猫小爷 关注 2016.09.14 23:01* 字数 12761 阅读 30639评论 35喜欢 720 一.什么是TCP/IP 网络和协议 1.     TCP/IP是 ...