FZU2018级算法第五次作业 missile(排序+枚举)
在解题报告之前,首先对同一次作业中另外一题(求逆序对)某人在未经冰少允许情况下,擅自登录冰少账号,原模原样剽窃冰少代码,并且最终还被评为优秀作业的行为表示严正抗议!
题目大意:
二维平面上给出 n 个点。然而再给出两个源点,分别以这两个源点为圆心做两个圆,设半径为 r1,r2。要求n 个点中的每个点都要至少被一个圆包含(在圆周上也算)。在满足要求的条件下,半径平方之和$(r1^2 + r2^2)$越小越好(半径可以是 0)。
对于 100%的数据 1<=N<=100000,且所有点与原点的距离都不超过 1000。
输出只有一个整数,表示最小的半径平方之和$(r1^2 + r2^2)$。
解题思路:
首先解决精度问题,答案要求输入最小半径平方和,因此在求距离直接保留其距离平方即可,不要开根号防止爆精度情况发生。
其次分析题目,易证得,两个圆的半径大小要么为0,要么为该圆心到某个点的距离,因此,我们可以枚举第一个圆的半径大小,覆盖圆的个数,那么剩下的圆显然要被另一个圆覆盖。
对于每个点,我们记录该点其到圆1距离以及圆2的距离,然后对这些点到圆1距离从大到小进行排序,从n至0枚举圆1覆盖的圆的个数,同时,对距离圆2的距离维护前缀最大值,二者相加取min即可。注意,这里从n至0枚举是因为可以实时更新圆2的半径大小,而若从0-n枚举则需要后缀最大值,需要使用dp进行维护,且空间复杂度较高,因此从n-0枚举。
时间复杂度,点排序$O(nlogn)$,半径枚举$O(n)$,总时间复杂度$O(nlogn)$。
具体代码实现如下:
#include<bits/stdc++.h> using namespace std; typedef pair <int,int> pii;
#define rep(i,x,y) for(int i=x;i<y;i++)
#define rept(i,x,y) for(int i=x;i<=y;i++)
#define per(i,x,y) for(int i=x;i>=y;i--)
#define pb push_back
#define fi first
#define se second
#define mes(a,b) memset(a,b,sizeof a)
#define mp make_pair
#define dd(x) cout<<#x<<"="<<x<<" ";
#define de(x) cout<<#x<<"="<<x<<"\n"; int read()
{
int ans=;
int flag=;
char ch;
while( (ch=getchar())<'' || ch>'' )
if(ch=='-') flag=-;
while( ch>='' && ch<='' )
{
ans=ans*+ch-'';
ch=getchar();
}
return flag*ans;
}
const int maxn=1e5+; pii point[maxn]; int d(int x,int y,int ox,int oy)
{
return (x-ox)*(x-ox)+(y-oy)*(y-oy);
} bool comp(const pii &s1,const pii &s2)
{
return s1.fi>s2.fi;
} int main()
{
int o1x,o2x,o1y,o2y;
o1x=read();
o1y=read();
o2x=read();
o2y=read();
int n;
n=read();
rep(i,,n)
{
int x,y;
x=read();
y=read();
point[i].fi=d(x,y,o1x,o1y);
point[i].se=d(x,y,o2x,o2y);
}
sort(point,point+n,comp);
int ans=point[].fi,r2=;
rep(i,,n)
{
ans=min(ans,point[i].fi+r2);
r2=max(r2,point[i].se);
}
ans=min(ans,r2);
printf("%d\n",ans);
return ;
}
FZU2018级算法第五次作业 missile(排序+枚举)的更多相关文章
- FZU2018级算法第五次作业 m_sort(归并排序或线段树求逆序对)
首先对某人在未经冰少允许情况下登录冰少账号原模原样复制其代码并且直接提交的赤裸裸剽窃行为,并且最终被评为优秀作业提出抗议! 题目大意: 给一个数组含n个数(1<=n<=5e5),求使用冒泡 ...
- FZU2018级算法第三次作业 3.16 station
题目大意: 给出1-n共n个数的入栈顺序,可以随时出栈,求出栈的最大字典序. 输入示例 输出示例 51 2 3 4 5 5 4 3 2 1 54 2 5 3 1 5 3 2 4 1 题目分析: 假设目 ...
- FZU2018级算法第一次作业 1.1fibonacci (矩阵快速幂)
题目 Winder最近在学习fibonacci 数列的相关知识.我们都知道fibonacci数列的递推公式是F(n)=F(n-1)+F(n-2)(n>=2 且n 为整数). Winder想知道的 ...
- FZU2018级算法第二次作业 2.10 逆序数(权值线段树)
题目: Nk 最近喜欢上了研究逆序数,给出一个由 1…n 组成的数列 a1,a2,a3…an, a1的逆序数就是在 a2…an 中,比 a1 小的数的数量,而 a2 的逆序数就是 a3….an 中比 ...
- 2016级算法第五次上机-F.ModricWang的水系法术
1066 ModricWang的水系法术 思路 比较典型的最大流问题,需要注意的是,题目已经暗示(明示)了这里的边是双向的,在建图的时候需要加上反向边的容量值. 解决最大流问题的基本思路就是不断在残量 ...
- 2016级算法第五次上机-E.AlvinZH的学霸养成记IV
1039 AlvinZH的学霸养成记IV 思路 难题,最大二分图匹配. 难点在于如何转化问题,n对n,一个只能攻击一个,判断是否存在一种攻击方案我方不死团灭对方.可以想到把所有随从看作点,对于可攻击的 ...
- 2016级算法第五次上机-C.Bamboo和"Coco"
1064 Bamboo和"Coco" 分析题意 每个亡灵至少一个花瓣,相邻的亡灵中思念值高的要获得的花瓣高(思念值相等是不需要花瓣一样多的).主要考贪心思路,为了使得花瓣总量最少, ...
- 2016级算法第五次上机-B.Bamboo&APTX4844魔发药水
Bamboo&APTX4844魔发药水 题意 "于是,Bamboo耐着性子,看巫师从袖子里掏出 M 瓶时光泉水和 K 粒绿色能量.每瓶时光泉水重量为 c ,生发效果为 l:每粒绿色能 ...
- 题解:2018级算法第五次上机 C5-图2
题目描述: 样例: 实现解释: 所有结点对最短路径的板子题 知识点: 寻找所有结点对最短路径,动态规划 坑点: 无坑,注意建边即可 使用的算法为floyd算法 按照程序顺序解释如下: 首先建图,以邻接 ...
随机推荐
- fluent-动网格-动态层
模型算例来源:http://blog.sina.com.cn/s/blog_599d8faa0100w4uj.html 原视频下载地址:http://yunpan.cn/cujM2FxLuGdLK ...
- elasticsearch x-pack license过期
1.注册一个新的license,每一项都要填写,每次可以使用一年,一年到期后再来注册一个新的 2.更新license (官方文档:https://www.elastic.co/guide/en/x-p ...
- Spring|IOC启动流程
1.IOC启动流程 IOC的启动流程分为两个阶段,第一阶段是容器的启动阶段,第二阶段是Bean实例化阶段. 容器的启动阶段:加载配置信息,分析配置信息,其他 Bean实例化阶段:实例化对象,装配依赖, ...
- 读取本地word 浏览器下载(设置编码格式)
String filePath = "C:\\word\\报告.doc"; BufferedWriter bos = null; BufferedReader bis = null ...
- SyntaxError: Non-ASCII character 'æ' in file csdn.py on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
错误信息: SyntaxError: Non-ASCII character , but no encoding declared; see http://python.org/dev/peps/pe ...
- js插件---弹出层sweetalert2(总结)
js插件---弹出层sweetalert2(总结) 一.总结 一句话总结: sweetalert2的效果非常好,效果比较Q萌,移动端适配也比较好,感觉比layer.js效果好点 1.SweetAler ...
- ch341a编程器写操作超时失败
当点击自动编写‘提示写操作超时失败’要怎么样才能解决,下面我给大家分享一下! 方法/步骤 首先我们点击操作 选择操作选项 看看箭头所指的几个地方是不是都没打上勾 我们把这几个地 ...
- org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
编程中遇到:org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot ...
- Blockchain & BPM
http://www.infoq.com/cn/news/2018/07/blockchain-BPM?utm_source=notification_email&utm_campaign=n ...
- VS Code 通过文件名查询文件并打开
On Windows press Ctrl+p or Ctrl+e On Mac press Cmd+p on the Linux press also Ctrl+p works Older Mac ...