这道题是个有想法的枚举qwq

导弹拦截【题目链接】

注意:此导弹拦截非彼导弹拦截p1020 导弹拦截

一道题是1999年的,然后我们现在要写的是经过11年韬光养晦之后的导弹拦截


SOLUTION:

要不先说一说我错误的贪心防止踩坑?

错误贪心1:40pts:先比较某个点到拦截系统1和2的距离,取距离较小的一个,然后看这个距离是否在当前的工作半径之内,如果在,继续循环,不在的话就更新当前某个拦截系统的工作半径。

显然这个贪心是不对的qwq(用jiaozhitou想想也可以想出来)

now1=now2=0;
for(int i=;i<=n;i++){
if(d[i].dis1<d[i].dis2){
if(d[i].dis1<=now1) continue;
now1=d[i].dis1;
}
else {
if(d[i].dis2<=now2) continue;
now2=d[i].dis2;
}
}

错误贪心2:70pts:应该很多小伙伴都和我一样卡在了70pts,因为这样的贪心是错误的emm:

70pts的贪心就是将错误1的if语句提到了外面,从而使一些可以被直接拦截的直接拦截而不是先取距离较小的一套拦截系统再进行拦截;但是还是有不对的地方(我不知道为什么)

now1=now2=;
for(int i=;i<=n;i++){
if(now1>d[i].dis1) continue;
if(now2>d[i].dis2) continue;
if(d[i].dis1<d[i].dis2)
now1=d[i].dis1;
else
now2=d[i].dis2;
}

首先显然是输入然后计算某个导弹到拦截系统的距离(这里直接计算平方啦没有再开根)

我比较喜欢写函数和结构体(全局变量我也很爱),所以就以函数的形式求了距离的平方,储存在结构体中。

计算完距离的平方之后,就是十分神奇的枚举了:

首先我们可以将所有的导弹按照距离某一个系统的距离从远到近排列(这里排列系统1),然后先假定所有的导弹都由系统1拦截,计算一个代价,然后依次枚举1~n个导弹由系统2拦截,求一个最小值,即为所求答案;

以下是

CODE:

#include<bits/stdc++.h>

using namespace std;

int x1,y11,x2,y2,now1,now2,minn;
int n; struct node{
int x,y,dis1,dis2;
}d[]; bool cmp(node x,node y){
return x.dis1>y.dis1;
} int jl(int x,int y,int k){
if(k==)
return (x-x1)*(x-x1)+(y-y11)*(y-y11);
else
return (x-x2)*(x-x2)+(y-y2)*(y-y2);
} int main(){
scanf("%d %d %d %d",&x1,&y11,&x2,&y2);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d %d",&d[i].x,&d[i].y);
d[i].dis1=jl(d[i].x,d[i].y,);
d[i].dis2=jl(d[i].x,d[i].y,);
}
sort(d+,d+n+,cmp);
now1=d[].dis1;minn=d[].dis1;
int js=;
for(int i=;i<=n;i++){
now1=d[i+].dis1;
if(now2<d[i].dis2) now2=d[i].dis2;
js=now1+now2;
if(js<minn) minn=js; }
cout<<minn<<endl;
}

【洛谷p1158】导弹拦截的更多相关文章

  1. 洛谷 P1158 导弹拦截(不是那个DP) 解题报告

    P1158 导弹拦截 题目描述 经过1111年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截.当工作半径为0时,则能够拦截与它位置恰好相同的导弹. ...

  2. 洛谷 P1020导弹拦截题解

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

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

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

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

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

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

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

  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)的算法,但题目 ...

  10. 【动态规划】【二分】【最长不下降子序列】洛谷 P1020 导弹拦截

    最长不下降子序列的nlogn算法 见 http://www.cnblogs.com/mengxm-lincf/archive/2011/07/12/2104745.html 这题是最长不上升子序列,倒 ...

随机推荐

  1. 爱奇艺免费vip观看地址

    本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...

  2. MYSQL数据导出与导入,secure_file_priv参数设置

    https://www.imooc.com/article/41883 MySQL 报错 [Code: 1290, SQL State: HY000]  The MySQL server is run ...

  3. FCC 成都社区·前端周刊 第 8 期

    01. 2018 前端开发者手册 这是一份 2018 前端开发手册,内容包括三个部分:前端工程实践.前端开发学习和前端开发工具. 详情:https://frontendmasters.com/book ...

  4. Django【第4篇】:Django之模板继承

    jango框架之模板继承和静态文件配置 一.模板继承 目的是:减少代码的冗余 语法: {% block classinfo %} {% endblock %} 具体步骤: 1.创建一个base.htm ...

  5. 对Moment.js的研究

    创建npm install moment --save-dev 日期格式化 moment().format('MMMM Do YYYY, h:mm:ss a'); // 六月 4日 2019, 6:2 ...

  6. Hybris commerce产品主数据的搜索API,批量返回若干主数据的值

    新建一个产品,identifier设置为i042416-1,创建之后立即能够在Backoffice里搜索出来: 等到Storefront的indexing做完之后,前台通过关键字i042416也能将这 ...

  7. wepy 中文乱码

    <view class="loginTitle"> <view class="{{currentTab==0?'select':'default'}}& ...

  8. HTML5基础内容(二)

    HTML(HyperText Markup Language)超文本标记语言 一.HTML注释 元素就是标签,标签就是元素. 注释中的内容不会在页面中显示,但是可以在源码中看到. 可以通过编写注释来对 ...

  9. 【bzoj1123】[POI2008]BLO

    *题目描述: Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有towns连通. *输入 输入n<=1000 ...

  10. Linux 安装R包

    https://www.cnblogs.com/jessepeng/p/10984983.html Linux 的R环境,可以通过anaconda jupyter notbook很容易的配置,见我之前 ...