在解题报告之前,首先对同一次作业中另外一题(求逆序对)某人在未经冰少允许情况下,擅自登录冰少账号,原模原样剽窃冰少代码,并且最终还被评为优秀作业的行为表示严正抗议!

  

题目大意:

  二维平面上给出 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(排序+枚举)的更多相关文章

  1. FZU2018级算法第五次作业 m_sort(归并排序或线段树求逆序对)

    首先对某人在未经冰少允许情况下登录冰少账号原模原样复制其代码并且直接提交的赤裸裸剽窃行为,并且最终被评为优秀作业提出抗议! 题目大意: 给一个数组含n个数(1<=n<=5e5),求使用冒泡 ...

  2. 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 题目分析: 假设目 ...

  3. FZU2018级算法第一次作业 1.1fibonacci (矩阵快速幂)

    题目 Winder最近在学习fibonacci 数列的相关知识.我们都知道fibonacci数列的递推公式是F(n)=F(n-1)+F(n-2)(n>=2 且n 为整数). Winder想知道的 ...

  4. FZU2018级算法第二次作业 2.10 逆序数(权值线段树)

    题目: Nk 最近喜欢上了研究逆序数,给出一个由 1…n 组成的数列 a1,a2,a3…an, a1的逆序数就是在 a2…an 中,比 a1 小的数的数量,而 a2 的逆序数就是 a3….an 中比 ...

  5. 2016级算法第五次上机-F.ModricWang的水系法术

    1066 ModricWang的水系法术 思路 比较典型的最大流问题,需要注意的是,题目已经暗示(明示)了这里的边是双向的,在建图的时候需要加上反向边的容量值. 解决最大流问题的基本思路就是不断在残量 ...

  6. 2016级算法第五次上机-E.AlvinZH的学霸养成记IV

    1039 AlvinZH的学霸养成记IV 思路 难题,最大二分图匹配. 难点在于如何转化问题,n对n,一个只能攻击一个,判断是否存在一种攻击方案我方不死团灭对方.可以想到把所有随从看作点,对于可攻击的 ...

  7. 2016级算法第五次上机-C.Bamboo和"Coco"

    1064 Bamboo和"Coco" 分析题意 每个亡灵至少一个花瓣,相邻的亡灵中思念值高的要获得的花瓣高(思念值相等是不需要花瓣一样多的).主要考贪心思路,为了使得花瓣总量最少, ...

  8. 2016级算法第五次上机-B.Bamboo&APTX4844魔发药水

    Bamboo&APTX4844魔发药水 题意 "于是,Bamboo耐着性子,看巫师从袖子里掏出 M 瓶时光泉水和 K 粒绿色能量.每瓶时光泉水重量为 c ,生发效果为 l:每粒绿色能 ...

  9. 题解:2018级算法第五次上机 C5-图2

    题目描述: 样例: 实现解释: 所有结点对最短路径的板子题 知识点: 寻找所有结点对最短路径,动态规划 坑点: 无坑,注意建边即可 使用的算法为floyd算法 按照程序顺序解释如下: 首先建图,以邻接 ...

随机推荐

  1. 【opencv C++ linux】linux下编译含opencv的C++代码

    首先写一个简单的测试代码 #include <opencv2/opencv.hpp> #include <iostream> #include <string> u ...

  2. 【多线程与并发】Java中的12个原子操作类

    从JDK1.5开始,Java提供了java.util.concurrent.atomic包,该包中的原子操作类提供了一种使用简单.性能高效(使用CAS操作,无需加锁).线程安全地更新一个变量的方式. ...

  3. * resolve_conffiles: Existing conffile /etc/config/dhcp is different from the conffile in the new package. The new conffile will be placed at /etc/config/dhcp-opkg.

    * resolve_conffiles: Existing conffile /etc/config/dhcp is different from the conffile in the new pa ...

  4. CEF3设置cookie

    #include "CEF3Helper.h" #include "../include/cef_app.h" #include "../includ ...

  5. nginx 80 下的一个路径 到 8888

    # For more information on configuration, see:# * Official English Documentation: http://nginx.org/en ...

  6. Activity: launchMode 和 Intent.FLAG_ACTIVITY_CLEAR_TOP

    Activity 的 launchMode: 1. standard: 标准模式 这种启动模式为标准模式,也是默认模式.每当我们启动一个Activity,系统就会相应的创建一个实例,不管这个实例是否已 ...

  7. Mockplus更快更简单的原型设计

    更快更简单的原型设计 https://www.mockplus.cn/ Mockplus,更快更简单的原型设计工具.快速创建原型,一键拖拽创建交互,团队协作省事省力.微软.华为.东软.育碧.Oracl ...

  8. Java PDF转换成图片并输出给前台展示

    首先需要导入所需工具类 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fo ...

  9. 【插件】thinkphp5+百度编辑器自定义上传

    1 官方下载sdk 2 在引入编辑器页面.写入js // 百度编辑器 UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActi ...

  10. Qt编写自定义控件60-声音波形图

    一.前言 这个控件源自于一个音乐播放器,在写该音乐播放器的时候,需要将音频的数据转换成对应的频谱显示,采用的fmod第三方库来处理(fmod声音系统是为游戏开发者准备的革命性音频引擎,非常强大和牛逼) ...