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;
}

最新文章

  1. 3D banner(CSS3+HTML5)
  2. jquery解析php通过ajax传过来的json二维数组对象
  3. 【BZOJ-3308】九月的咖啡店 最大费用最大流 + 线性筛素数
  4. Mongodb Management Studio
  5. Akka(一) - akka的wordcount
  6. 显式参数 VS 隐式参数
  7. 设置cas server使用http非安全协议
  8. [Jobdu] 题目1517:链表中倒数第k个结点
  9. The Native POSIX Thread Library for Linux - 设计文档
  10. 数据意识崛起,从企业应用看BI软件的未来发展
  11. 2017寒假零基础学习Python系列之函数之 返回多个值
  12. 小例子理解SQL的左连接与右连接
  13. Web前端学习第一天
  14. ubuntu 16.04 下安装NVDIA的库(CUDA+CUDNN)
  15. 提取出一个组装基因组的gap(N)和重复序列区域,保存为bed格式
  16. react入门-组件方法、数据和生命周期
  17. 20165310 Java实验四 《Android程序设计》
  18. hdu 1506 Largest Rectangle in a Histogram——笛卡尔树
  19. Webservice发布
  20. solr特点三: defType(查询权重排序)

热门文章

  1. 软件测试Lab 1 Junit and Eclemma
  2. HTML5 参数传递
  3. JavaScript基础:(加号,数值转换,布尔转换)
  4. String和string
  5. Jsoup进阶选择器
  6. 梦织未来Windows驱动编程 第04课 驱动相关的数据结构
  7. [VC]strcpy和strncoy的区别
  8. 棋盘V(最小费用最大流)
  9. 2017.12.11 String 类中常用的方法
  10. PAT (Basic Level) Practise (中文)- 1004. 成绩排名 (20)