http://www.lydsy.com/JudgeOnline/problem.php?id=2458

[BeiJing2011]最小三角形

描述

Frisk现在遇到了一个有趣的问题。

平面上有N个点,Frisk想找出周长最小的三角形。

由于点非常多,分布也非常乱,所以Frisk想请你来解决这个问题。

为了减小问题的难度,这里的三角形也包括共线的三点。

输入

第一行包含一个整数N表示点的个数。

接下来N行每行有两个整数,表示这个点的坐标。

输出

输出只有一行,包含一个6位小数,为周长最短的三角形的周长(四舍五入)。

样例

输入
4
1 1
2 3
3 3
3 4
输出
3.414214

提示

100%的数据中N≤200000。


考试时失了智,只拿了半个暴力分

其实这和平面最近点对方法一毛一样

除了多了一层循环

代码蒯上

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
inline int gotcha()
{
register int a=0;bool b=1;register char c=getchar();
while(c>'9' || c<'0'){if(c=='-')b=0;c=getchar();}
while(c>='0' && c<='9')a=a*10+c-48,c=getchar();
return b?a:-a;
}
const double EPS = 1e-9;
const int _ = 200002;
using namespace std;
struct point{double x,y;}p[_];
inline bool init_cmp(const point &a,const point &b){return a.x<b.x;}
inline bool cmp(const int &a,const int &b){return p[a].y<p[b].y;}
inline double xdis(const int &a,const int &b){return fabs(p[a].x-p[b].x);}
inline double ydis(const int &a,const int &b){return fabs(p[a].y-p[b].y);}
double dist(int a,int b){return sqrt(xdis(a,b)*xdis(a,b)+ydis(a,b)*ydis(a,b));}
int n,q[_],lq;
double finder(int l,int r)
{
if(r<l+2)return 1e33;
int i,j,k,mid=(l+r)>>1;
double dis=min(finder(l,mid),finder(mid+1,r));
lq=0;
for(i=l;i<=r;i++)if(xdis(i,mid)<=dis/2)q[++lq]=i;
sort(q+1,q+lq+1,cmp);
for(i=1;i<=lq-2;i++)
for(j=i+1;j<=lq-1 && ydis(q[i],q[j])<=dis/2;j++)
for(k=j+1;k<=lq && ydis(q[i],q[k])<=dis/2;k++)
dis=min(dis,dist(q[i],q[j])+dist(q[j],q[k])+dist(q[i],q[k]));
return dis;
}
int main()
{
register int i;
n=gotcha();
for(i=1;i<=n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
sort(p+1,p+n+1,init_cmp);
printf("%.6lf",finder(1,n));
return 0;
}

分治 - 计算几何 - BZOJ2458,[BeiJing2011]最小三角形的更多相关文章

  1. bzoj2458: [BeiJing2011]最小三角形(分治+几何)

    题目链接:bzoj2458: [BeiJing2011]最小三角形 学习推荐博客:分治法编程问题之最接近点对问题的算法分析 题解:先将所有点按x值排列,然后每次将当前区间[l,r]分成左右两半递归求解 ...

  2. BZOJ2458 Beijing2011最小三角形(分治)

    类似于平面最近点对,考虑分治,即分别计算分割线两侧的最小三角形再考虑跨过线的三角形. 复杂度证明也是类似的,对于某一个点,在另一侧可能与其构成最小三角形的点在一个d*d/2的矩形内(两边之和大于第三边 ...

  3. [BZOJ2458][BeiJing2011]最小三角形(分治)

    求平面上n个点组成的周长最小的三角形. 回忆平面最近点对的做法,找到横坐标的中点mid分治到两边,合并时考虑离mid横坐标不超过当前最小值d的所有点,按y排序后暴力更新答案. 这个题也一样,先分治到两 ...

  4. BZOJ2458: [BeiJing2011]最小三角形

    类似分治最近点对的方法乱搞一下就行. #include<bits/stdc++.h> #define N 200010 #define M (s+t>>1) using nam ...

  5. bzoj-2458 2458: [BeiJing2011]最小三角形(计算几何+分治)

    题目链接: 2458: [BeiJing2011]最小三角形 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1101  Solved: 380 Des ...

  6. bzoj 2458: [BeiJing2011]最小三角形 题解

    [前言]话说好久没有写题解了.到暑假了反而忙.o(╯□╰)o [原题] 2458: [BeiJing2011]最小三角形 Time Limit: 10 Sec  Memory Limit: 128 M ...

  7. BZOJ 2458: [BeiJing2011]最小三角形 | 平面分治

    题目: 给出若干个点 求三个点构成的周长最小的三角形的周长(我们认为共线的三点也算三角形) 题解: 可以参考平面最近点对的做法 只不过合并的时候改成枚举三个点更新周长最小值,其他的和最近点对大同小异 ...

  8. BZOJ 2458: [BeiJing2011]最小三角形 (分治)

    分治就是了. 类似于分治找最近/远点对. CODE #include <bits/stdc++.h> using namespace std; const double eps = 1e- ...

  9. [BZOJ]2458: [BeiJing2011]最小三角形

    题目大意:给出平面上n个点,求最小的由这些点组成的三角形的周长.(N<=200,000) 思路:点按x坐标排序后分治,每次取出与排在中间的点的横坐标相差不超当前答案一半的点,按y坐标排序后再暴力 ...

随机推荐

  1. Error和Exception的区别?

    Error和Exception都继承自Throwable类 二者不同之处在于: Exception: 1.可以是可控制的(checked)或是不可控制的(unchecked) 2.表示一个有程序员编写 ...

  2. CST,CET,UTC,GMT,DST,Unix时间戳几种常见时间概述与关系(转)

    转自:http://www.cnblogs.com/frontendBY/p/5215785.html 1.UTC: Universal Time Coordinated 协调世界时,又称世界标准时间 ...

  3. 逐步解读String类(一)

    一句题外话 面试刚入行的Java新手,侧重基础知识:面试有多年工作经验的老鸟,多侧重对具体问题的解决策略. 从一类面试题说起 考察刚入行菜鸟对基础知识的掌握程度,面试官提出关于String类的内容挺常 ...

  4. MySQL使用一张表的一列更新另一张表的一列

    使用MySQL中,在一张表etl_table_field_info上新增了一个字段tgt_table_en_name,该字段的值想从表etl_table_property_info的tgt_table ...

  5. 【洛谷3275】[SCOI2011] 糖果(差分约束系统入门题)

    点此看题面 大致题意: 有\(N\)个小朋友,要求每个人都得到糖果,且每个人的糖果总数满足一定的关系式,请你求出至少共分给小朋友们多少糖果. 关系式的转换 首先,我们可以将题目中给定的式子进行转换: ...

  6. 【BZOJ1060】[ZJOI2007] 时态同步(树形DP)

    点此看题面 大致题意: 给你一棵带权树,每次使用道具可以将某条边的边权加\(1\),问你至少需要使用多少次道具,才能使每个叶子节点到根节点的距离相等. 贪心的思想 首先,我们应该先有一个贪心的思想. ...

  7. Zend Studio 12.5.1原版安装破解

    安装官方Zend Studio 12.5.1原版,关闭zend studio,然后将破解补丁com.zend.verifier_12.5.1.v20150514-2003.jar覆盖到 安装目录\pl ...

  8. springboot集成shiro的session污染问题

    问题起因是这样的,有两套系统,系统a和系统b.两套系统均使用shiro做的权限管理,之前部署在两台机器上.使用浏览器打开a系统后另开页签打开b系统,互不干扰都能正常使用,后因业务迁移,两套系统部署到了 ...

  9. Drupal7强制把主题恢复到默认主题

    今天在写Theme,退出登陆的时候无法进入管理后台. 万不得已之下只有使用数据库进行恢复. Rest Drupal Theme to Bartik SQL语句如下: WHERE type = 'the ...

  10. InstallShield Limited Edition for Visual Studio 2013 图文教程打包安装包

    http://www.wuleba.com/23892.html 从Visual Studio 2012开始,微软就把自家原来的安装与部署工具彻底废掉了,转而让大家去安装使用第三方的打包工具“Inst ...