【洛谷p1158】导弹拦截
这道题是个有想法的枚举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】导弹拦截的更多相关文章
- 洛谷 P1158 导弹拦截(不是那个DP) 解题报告
P1158 导弹拦截 题目描述 经过1111年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截.当工作半径为0时,则能够拦截与它位置恰好相同的导弹. ...
- 洛谷 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 ...
- 洛谷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)的算法,但题目 ...
- 【动态规划】【二分】【最长不下降子序列】洛谷 P1020 导弹拦截
最长不下降子序列的nlogn算法 见 http://www.cnblogs.com/mengxm-lincf/archive/2011/07/12/2104745.html 这题是最长不上升子序列,倒 ...
随机推荐
- linux服务器安全配置攻略
引言: 最小的权限+最少的服务=最大的安全 所以,无论是配置任何服务器,我们都必须把不用的服务关闭.把系统权限设置到最小话,这样才能保证服务器最大的安全.下面是CentOS服务器安全设置,供大家参考. ...
- axios中put和patch的区别(都是update , put是需要提交整个对象资源,patch是可以修改局部)
patch方法用来更新局部资源,这句话我们该如何理解? 假设我们有一个UserInfo,里面有userId, userName, userGender等10个字段.可你的编辑功能因为需求,在某个特别的 ...
- codeforces 819B - Mister B and PR Shifts(思维)
原题链接:http://codeforces.com/problemset/problem/819/B 题意:把一个数列整体往右移k位(大于n位置的数移动到数列前端,循环滚动),定义该数列的“偏差值” ...
- javascript之alter的坑
1.注意在使用alert返回两数之和时,会出现0.1+0.2并不等于0.3的bug 解决方法: var f=0.1; var g=0.2; alert((parseFloat(f)*100+parse ...
- 使用 Markdown 写博客
后台设置(左侧边栏区找到-设置默认编辑器). 设置为 Markdown 后保存,即可在编辑新博客时生效.
- 动态DP总结
动态DP 何为动态DP? 将画风正常的DP加上修改操作. 举个例子? 给你一个长度为\(n\)的数列,从中选出一些数,要求选出的数互不相邻,最大化选出的数的和. 考虑DP,状态设计为\(f[i][1/ ...
- 安卓手机和ios手机上图片未设置宽度可能导致ios上图片贼小
处理方法: 设置固定宽度,高度自适应
- JPA Hibernate 等面向对象持久化框架难以解决的问题
1+N查询性能问题 单个更新实体对象,而不是使用单调语句 在Java端做了很重的数据处理,数据库端反而很少 多层次 fetch inner join 难以实现 关联映射难以自定义条件 级联操作难以掌控 ...
- 个推一键认证SDK重磅推出,打造秒级登录体验,让用户一“键”倾心
移动互联网时代,用户注意力的持续时间越来越短,他们追求便捷与高效.从账号密码登录.短信验证,到第三方登录甚至人脸识别登录,APP的注册/登录方式在逐步变化,开发者希望在这重要的交互端口提升用户的体验, ...
- 最新版本的MySQL的下载和安装(Release: 8.0.12)
1.打开百度搜索[Myql],或直达官网https://dev.mysql.com/ 2.点选[Download按钮],跳转到下载页面,拉到底部再点选[Community Download]社区版[免 ...