这道题是个有想法的枚举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. postman(三):详解postman动态变量使用

    参考: Variables Dynamic variables

  2. 【串线篇】spring boot自定义starter

    starter: 一.这个场景需要使用到的依赖是什么? 二.如何编写自动配置 启动器只用来做依赖导入:(启动器模块是一个空 JAR 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库) ...

  3. 使用QT创建系统托盘

    使用QT来创建一个系统托盘,事实上是一件很简单的事.为什么这么说?一是因为QT文档给出了比较详细的例子,二是QT的结构比较优雅,设计风格统一.但是在动手之前,我们要从哪里下手?虽然QT文档给出了一个比 ...

  4. mysql 分页查询及优化

    1.分页查询 select * from table limit startNum,pageSize 或者 select * from table limit pageSize offset star ...

  5. rocketmq特性(features)

    # 特性(features) 1 订阅与发布 消息的发布是指某个生产者向某个topic发送消息:消息的订阅是指某个消费者关注了某个topic中带有某些tag的消息,进而从该topic消费数据. 2 消 ...

  6. asp.net能否上传文件夹下所有文件

    HTML部分 <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx. ...

  7. [洛谷3934]P3934 Nephren Ruq Insania题解

    先放个奈芙莲 解法 看到这种题目就知道是欧拉降幂,然后根据某玄学证明,递归欧拉降幂从l到r不会超过\(\Theta(log_n)\),所以直接递归解决,然后区间修改直接树状数组维护一下 然后就A了 代 ...

  8. SpringCloud 教程 (五) 断路器监控(Hystrix Dashboard)

    一.Hystrix Dashboard简介 在微服务架构中为例保证程序的可用性,防止程序出错导致网络阻塞,出现了断路器模型.断路器的状况反应了一个程序的可用性和健壮性,它是一个重要指标.Hystrix ...

  9. SQL 基本查询语句

    --使用数据库 use date go --创建表班级表 create table classInfo ( classNo ,),--主键约束使用primary key identity classN ...

  10. CentOS和Windows互相远程桌面方法

    https://blog.csdn.net/libaineu2004/article/details/49407883