题目描述:

$Xaviera$ 现在遇到了一个有趣的问题。
平面上有 $N$ 个点,$Xaviera$ 想找出周长最小的三角形。
由于点非常多,分布也非常乱,所以 $Xaviera$ 想请你来解决这个问题。
为了减小问题的难度,这里的三角形也包括共线的三点。

算法标签:分治

思路:

每次不断分治下去,每一维只需要对于两区间最靠近中间仍有可能小于现有答案的部分进行统计。

以下代码:

#include<bits/stdc++.h>
#define il inline
#define db double
#define _(d) while(d(isdigit(ch=getchar())))
using namespace std;
const int N=2e5+5;
const db eps=1e-8;
int n,b[N],cnt;
db ans;
struct node{int x,y;
}t[N];
il int read(){int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch^48;_()x=(x<<1)+(x<<3)+(ch^48);return f*x;
}
bool cmp(node t1,node t2){return t1.x<t2.x;
}
bool cmp1(int t1,int t2){return t[t1].y<t[t2].y;
}
il db pf(db x){return x*x;
}
il db dis(int a,int b){return sqrt(pf(t[a].x-t[b].x)+pf(t[a].y-t[b].y));
}
il void solve(int l,int r){if(l==r)return;int mid=(l+r)>>1;solve(l,mid);solve(mid+1,r);cnt=0;b[++cnt]=mid;for(int i=mid-1;i>=l;i--)if(t[mid].x-t[i].x<ans)b[++cnt]=i;else break;for(int i=mid+1;i<=r;i++)if(t[i].x-t[mid].x<ans)b[++cnt]=i;else break;sort(b+1,b+1+cnt,cmp1);long double dis1,dis2,dis3;for(int i=1;i<cnt-1;i++){for(int j=i+1;j<cnt;j++){if(t[b[j]].y-t[b[i]].y>ans)break;dis1=dis(b[i],b[j]);if(dis1>ans)continue;for(int k=j+1;k<=cnt;k++){if(t[b[k]].y-t[b[j]].y>ans)break;dis2=dis(b[i],b[k]);if(dis2>ans)continue;dis3=dis(b[j],b[k]);if(dis1+dis2+dis3<ans)ans=dis1+dis2+dis3;}}}
}
int main()
{n=read();for(int i=1;i<=n;i++)t[i].x=read(),t[i].y=read();sort(t+1,t+1+n,cmp);ans=dis(1,2)+dis(1,3)+dis(2,3);solve(1,n);printf("%lf\n",ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/Jessie-/p/10481058.html

bzoj2458: [BeiJing2011]最小三角形相关推荐

  1. [BZOJ2458][BeiJing2011]最小三角形

    题目描述 Description Xaviera现在遇到了一个有趣的问题.平面上有N个点,Xaviera想找出周长最小的三角形.由于点非常多,分布也非常乱,所以Xaviera想请你来解决这个问题.为了 ...

  2. BZOJ 2458 最小三角形(分治)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2458 题意:平面上有N个点,输出周长最小的三角形的周长. 思路:按照x升序.分治.然后就 ...

  3. bzoj 乱刷计划 50/50

    前言 话说第一个板刷计划由于种种原因而告一段落了..其实那一版还有很多题想做,那就只能放一放了 附上效果图一张(几乎每一题都在我博客有题解): 打算 可以复习,重做自己做过的题,不局限于没做过的 乱刷 ...

  4. L3-021 神坛(极角排序求三角形最小面积)

    在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面 ...

  5. 【CCCC】L3-021 神坛 (30分)计算几何+求三角形面积(极角排序)

    problem L3-021 神坛 (30分) 在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如 ...

  6. CCPC2019-湖南全国邀请赛(湘潭大学)

    Problem A Chessboard 补题地址:http://acm.hdu.edu.cn/showproblem.php?pid=6532 题意:有n个点,其价值为i:分别对某一行.某一列以下的 ...

  7. 星光 SaaS 伙伴甄云科技:如何构建更适合快成长企业的数字化采购管理平台?

    文章目录 前言 一.华为云助力中小企业快成长 二.SaaS 伙伴-甄云科技介绍 三.公司发展方向与要求的不匹配 3.1.快速成长型公司案例-戴尔 3.2.价值链和企业管理支撑不能匹配发展要求 四.支撑 ...

  8. 基于Problem Solving with Algorithms and Data Structures using Python的学习记录(4)——Recursion

    4.1.目标 本章的目标如下: 要理解可能难以解决的复杂问题有一个简单的递归解决方案. 学习如何递归地写出程序. 理解和应用递归的三个定律. 将递归理解为一种迭代形式. 实现问题的递归公式化. 了解计 ...

  9. 2019.8.7 金华正睿集训总结Day11(ACM)

    8.7 在这个欢乐的七夕佳节,我们迎来了欢乐的ACM 于是,在和yjz大佬和yy大佬严肃(?)讨论后,我们的队名就叫七夕"快乐"(为什么加引号就不说了,qq情头是和小号的某) 在前 ...

最新文章

  1. 浅谈通信编程(二)--如何分离通信物理接口和应用程序
  2. Educational Codeforces Round 30 A
  3. NYOJ 5767 装背包
  4. lombok @Builder注解的使用
  5. 查看tensorflow等第三方包支持平台
  6. php书签源码,OneNav简约PHP导航书签源码
  7. 系统学习机器学习之线性判别式(三)--广义线性模型(Generalized Linear Models)
  8. c# 异常处理 try-catch-finally
  9. codeforces 27 E. Number With The Given Amount Of Divisors(数论+dfs)
  10. Kettle Spoon入门学习
  11. 医院建筑综合布线方案特点
  12. 机器人庄园作文_关于周庄一日游作文六年级汇总5篇
  13. 只有一条线的生存分析图 复杂一点的生存分析 及其参数详细解释
  14. 启动docker 服务时 虚拟机端口转发 外部无法访问
  15. QPushButton 实现保持按下效果
  16. mysql+视频文件转成流_详解java调用ffmpeg转换视频格式为flv
  17. 无法将类中的构造器应用到给定类型
  18. 随机梯度下降算法 入门介绍(最通俗易懂)
  19. [Neuronal Dynamics 笔记] I Foundations of Neuronal Dynamics - 1 Introduction
  20. STM32cubemx——超声波测距

热门文章

  1. Deepfake技术实现秒速换脸!!!
  2. 每天生产45亿词,GPT3已渗透300+应用,网友:边吃边拉
  3. SAP SD 常用表
  4. 东京奥运会将利用 AI 识别可疑人员
  5. 5G+AI成产业新引擎 安防行业切入点在哪里?
  6. 出行公司集体亮剑 自动驾驶花落谁家?
  7. 机器学习面试题集-图解准确率,精确率,召回率
  8. 如何在Keras中训练大型数据集
  9. 圆桌讨论:人工智能的未来
  10. 机器学习获量子加速!物理学家与计算科学家「自然联姻」