洛谷 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)的算法,但题目 ...
随机推荐
- Luogu P2522 [HAOI2011]Problem b
如果你做过[Luogu P3455 POI2007]ZAP-Queries就很好办了,我们发现那一题求的是\(\sum_{i=1}^a\sum_{j=1}^b[\gcd(i,j)=d]\),就是这道题 ...
- bitcoin源码解析 - 交易 Transcation (一)
比特币中的交易可谓是比特币的最核心部分.比特币由交易产生,而区块就是用来存储交易的.所以,交易是比特币存在的载体,同时也是比特币中最复杂的部分.交易的运作层层相扣,各个部分缺一不可,十分严密,由此体现 ...
- CRC---循环冗余校验
typedef unsigned char uchar; typedef unsigned int uint; typedef unsigned short uInt16; uint crc; // ...
- vue 首页背景图片加载完成前增加 loading 效果 -- 使用 new Image() 实现
1. 创建 loading 公用组件 <template> <div class="load-container"> <div class=" ...
- 自动化批量管理工具salt-ssh - 运维小结
根据以往运维工作中操作经验来说,当管理上百台上千台服务器时,选择一款批量操作工具是及其有必要的.早期习惯于在ssh信任关系的前提下做for;do;done循环语句的批量操作,后来逐渐趋于使用批量工具操 ...
- systemctl添加开机启动
我们对service和chkconfig两个命令都不陌生,systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service功能于一体. systemctl is-enable ...
- springboot undertow替换tomcat方式
版权声明: https://blog.csdn.net/weixin_38187317/article/details/81532560说明 undertow,jetty和tomcat可 ...
- 2016.3.30 OneZero站立会议
会议时间:2016年3月30日 13:00~13:20 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论,确定会议内容或分配下一步任务. 会议内容: 1.汇报头一天工作情 ...
- #个人博客作业week3——微软必应词典的使用
产品的调研和评测 笔者使用的是win8的必应词典客户端. 首先打开客户端,用户界面的设计十分简洁,使用方便.但是词典主页与大多外语软件的设计相仿,例如有每日一句,每日阅读等模块,并没有令人感到新奇的地 ...
- 《Linux内核设计与分析》第四章读书笔记
<内核设计与实现>第四章读书笔记 第四章:进程调度 进程(操作系统)程序的运行态表现形式. 进程调度程序,它是确保进程能有效工作的一个内核子系统. 调度程序负责决定将哪个进程投入运行,何时 ...