CF333E Summer Earnings
CF333E Summer Earnings
题目
https://codeforces.com/problemset/problem/333/E
题解
思路
知识点:枚举,图论,位运算。
题目要求从给定的坐标中的选取三个点为圆心,画出 \(3\) 个不相交且半径相等的圆,并求圆半径可能的最大值。
显然,题目可以转化为,任选三个点,找到构成三角形最短边长的 \(1/2\) 中的最大值,直接枚举三个点的复杂度是 \(O(n^3)\) 是不行的。
考虑不从找点角度构成三角形,因为没有操作空间,而先预处理出边端点序号和边长信息记录到边结构体中,复杂度是 \(O(n^2)\) ,从找边角度去构成三角形。但单纯找边也是 \(O(n^3)\) ,需要优化。
既然要找到最长边,可以考虑先把边长从大到小排序,从长边到短边开始找,这样找到第一条能和已经遍历过的较长边构成三角的边就是最大的边。
每次处理一个边,将会记录边对应两个端点的互连的信息,表示这条边已枚举,这里可以给点结构体增设一个 \(bitset\) 变量 \(bs\),\(bs[i]\) 表示为这个点是否已与 \(i\) 号点相连,用 \(bitset\) 类型而不用 \(bool\) 数组主要考虑到空间问题和位运算便捷的操作。
最后找到一条边,能和已经枚举的较长边互连成三角形,这条边边长的 \(1/2\) 即是答案。若要构成三角形,则这条边两个端点的有一个相同的连接点,而通过两个端点各自 \(bs\) 进行 \(\&\) 运算的结果可以得到两端点是否连接了同一个点。
时间复杂度 \(O(n^2 \log n)\)
空间复杂度 \(O(n^2)\)
代码
#include <bits/stdc++.h>
using namespace std;
struct dot{
int x,y;
bitset<3007> bs;
}d[3007];
struct len_dot{
int len,a,b;
}ld[3000*3000+7];
int cnt = 0;
int dist2(int a,int b){
return (d[a].x - d[b].x)*(d[a].x - d[b].x) + (d[a].y - d[b].y)*(d[a].y - d[b].y);
}
bool cmp(len_dot a,len_dot b){
return a.len>b.len;
}
int main(){
int n;
cin>>n;
for(int i = 0;i<n;i++){
cin>>d[i].x>>d[i].y;
}
for(int i = 0;i<n;i++){
for(int j = i+1;j<n;j++){
ld[cnt].len = dist2(i,j);
ld[cnt].a = i;
ld[cnt].b = j;
cnt++;
}
}
sort(ld,ld+cnt,cmp);
double ans;
for(int i = 0;i<cnt;i++){
if((d[ld[i].a].bs & d[ld[i].b].bs).any()){
ans = sqrt(ld[i].len)/2;
break;
}
d[ld[i].a].bs[ld[i].b] = 1;
d[ld[i].b].bs[ld[i].a] = 1;
}
cout<<fixed<<ans<<'\n';
return 0;
}
CF333E Summer Earnings的更多相关文章
- CF习题集二
CF习题集二 一.CF507E Breaking Good 题目描述 \(Breaking Good\)这个游戏对于有经验的玩家来说也有一定的难度. 游戏的主角小明希望加入一个叫斧头帮的犯罪团伙.这个 ...
- Codeforces 333E Summer Earnings(bitset)
题目链接 Summer Earnings 类似MST_Kruskal的做法,连边后sort. 然后对于每条边,依次处理下来,当发现存在三角形时即停止.(具体细节见代码) 答案即为发现三角形时当前所在边 ...
- codeforces Summer Earnings(bieset)
Summer Earnings time limit per test 9 seconds memory limit per test 256 megabytes input standard inp ...
- Codeforces 333E Summer Earnings - bitset
题目传送门 传送门I 传送门II 传送门III 题目大意 给定平面上的$n$个点,以三个不同点为圆心画圆,使得圆两两没有公共部分(相切不算),问最大的半径. 显然答案是三点间任意两点之间的距离的最小值 ...
- [Machine Learning][The Analytics Edge][Predicting Earnings from Census Data]
census = read.csv("census.csv")library(caTools)set.seed(2000)spl = sample.split(census$ove ...
- CodeForces 333E. Summer Earnings
time limit per test 9 seconds memory limit per test 256 megabytes input standard input output standa ...
- Codeforces 333E Summer Earnings ——Bitset
[题目分析] 找一个边长最大的三元环. 把边排序,然后依次加入.加入(i,j)时,把i和j取一个交集,看看是否存在,存在就找到了最大的三元环. 输出即可,n^3/64水过. [代码] #include ...
- Money, save or spend, this is a problem .
Win a lottery? Had a great hand at the casino? Did fortune shine upon you in the stock market? 彩票中了大 ...
- 做Adsense的一些经验
The payment you receive per click depends on how much advertisers are paying per click to advertise ...
随机推荐
- Java语言学习day19--7月25日
今日内容介绍1.继承2.抽象类3.综合案例---员工类系列定义 ###01继承的概述 *A:继承的概念 *a:继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系 *b:在Jav ...
- 最新MATLAB R2021b超详细安装教程(附完整安装文件)
摘要:本文详细介绍Matlab R2021b的安装步骤,为方便安装这里提供了完整安装文件的百度网盘下载链接供大家使用.从文件下载到证书安装本文都给出了每个步骤的截图,按照图示进行即可轻松完成安装使用. ...
- PowerDotNet平台化软件架构设计与实现系列(13):应用监控平台
本文再写一篇和具体业务逻辑几乎无关的公共服务应用监控平台.PowerDotNet自研的应用监控平台系统,是服务治理的重要拼图,和服务治理平台配合使用效果更好. 监控开源产品非常丰富,站在巨人的肩膀上, ...
- 全场景AI推理引擎MindSpore Lite, 助力HMS Core视频编辑服务打造更智能的剪辑体验
移动互联网的发展给人们的社交和娱乐方式带来了很大的改变,以vlog.短视频等为代表的新兴文化样态正受到越来越多人的青睐.同时,随着AI智能.美颜修图等功能在图像视频编辑App中的应用,促使视频编辑效率 ...
- CEPH-5:ceph集群基本概念与管理
ceph集群基本概念与管理 ceph集群基本概念 ceph集群整体结构图 名称 作用 osd 全称Object Storage Device,主要功能是存储数据.复制数据.平衡数据.恢复数据等.每个O ...
- this-2
读起来使你有新认识或可以使你离更确切的定义更近时的文章不应该被忽略.thisthis既不指向函数自身,也不指向函数的词法作用域(ES6中箭头函数采用词法作用域).this实际上是函数被调用时才发生绑定 ...
- 华为OPS,自定义命令,动态执行命令
OPS 开放可编程系统OPS(Open Programmability System)是指设备通过提供统一的应用程序接口API(Application Programming Interfa ...
- Spring Boot 3.0.0 M3、2.7.0发布,2.5.x将停止维护
昨晚(5月19日),Spring Boot官方发布了一系列Spring Boot的版本更新,其中包括: Spring Boot 3.0.0-M3 Spring Boot 2.7.0 Spring Bo ...
- mybatis中返回一个List字段
目的:在一个查询接口里面,返回一个人的信息,以及这个人所携带的东西的信息,返回效果如下: { "msg": { "listMain": [ { "id ...
- django框架7
内容概要 聚合查询 分组查询 F查询 Q查询 ORM查询优化 ORM常见字段类型 ORM重要参数 ORM事务操作 ORM执行原生SQL 多对多三种创建方式 内容详情 聚合查询 MySQL聚合函数:ma ...