BZOJ2458: [BeiJing2011]最小三角形
类似分治最近点对的方法乱搞一下就行。
#include<bits/stdc++.h>
#define N 200010
#define M (s+t>>1)
using namespace std;
struct vec{
int x,y;
}u[N],v[N];
bool foo(vec a,vec b){
return a.x<b.x;
}
bool bar(vec a,vec b){
return a.y<b.y;
}
double sqr(double x){
return x*x;
}
double dist(vec a,vec b){
return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
}
double dist(vec a,vec b,vec c){
return dist(a,b)+dist(b,c)+dist(a,c);
}
double d=1e64;
void solve(int s,int t){
if(t-s>2){
solve(s,M);
solve(M,t);
int m=0;
for(int i=s;i!=t;++i)
if(abs(u[i].x-u[M].x)<<1<d)
v[m++]=u[i];
sort(v,v+m,bar);
for(int i=0;i!=m;++i)
for(int j=i+1;j!=m
&&v[j].y-v[i].y<<1<d;++j)
for(int k=i+1;k!=j;++k)
d=min(d,dist(v[i],v[j],v[k]));
}
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i!=n;++i)
scanf("%d%d",&u[i].x,&u[i].y);
sort(u,u+n,foo);
solve(0,n);
printf("%.6f\n",d);
}
BZOJ2458: [BeiJing2011]最小三角形的更多相关文章
- bzoj2458: [BeiJing2011]最小三角形(分治+几何)
题目链接:bzoj2458: [BeiJing2011]最小三角形 学习推荐博客:分治法编程问题之最接近点对问题的算法分析 题解:先将所有点按x值排列,然后每次将当前区间[l,r]分成左右两半递归求解 ...
- 分治 - 计算几何 - BZOJ2458,[BeiJing2011]最小三角形
http://www.lydsy.com/JudgeOnline/problem.php?id=2458 [BeiJing2011]最小三角形 描述 Frisk现在遇到了一个有趣的问题. 平面上有N个 ...
- BZOJ2458 Beijing2011最小三角形(分治)
类似于平面最近点对,考虑分治,即分别计算分割线两侧的最小三角形再考虑跨过线的三角形. 复杂度证明也是类似的,对于某一个点,在另一侧可能与其构成最小三角形的点在一个d*d/2的矩形内(两边之和大于第三边 ...
- [BZOJ2458][BeiJing2011]最小三角形(分治)
求平面上n个点组成的周长最小的三角形. 回忆平面最近点对的做法,找到横坐标的中点mid分治到两边,合并时考虑离mid横坐标不超过当前最小值d的所有点,按y排序后暴力更新答案. 这个题也一样,先分治到两 ...
- bzoj-2458 2458: [BeiJing2011]最小三角形(计算几何+分治)
题目链接: 2458: [BeiJing2011]最小三角形 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1101 Solved: 380 Des ...
- bzoj 2458: [BeiJing2011]最小三角形 题解
[前言]话说好久没有写题解了.到暑假了反而忙.o(╯□╰)o [原题] 2458: [BeiJing2011]最小三角形 Time Limit: 10 Sec Memory Limit: 128 M ...
- [BZOJ]2458: [BeiJing2011]最小三角形
题目大意:给出平面上n个点,求最小的由这些点组成的三角形的周长.(N<=200,000) 思路:点按x坐标排序后分治,每次取出与排在中间的点的横坐标相差不超当前答案一半的点,按y坐标排序后再暴力 ...
- BZOJ 2458: [BeiJing2011]最小三角形 | 平面分治
题目: 给出若干个点 求三个点构成的周长最小的三角形的周长(我们认为共线的三点也算三角形) 题解: 可以参考平面最近点对的做法 只不过合并的时候改成枚举三个点更新周长最小值,其他的和最近点对大同小异 ...
- BZOJ 2458: [BeiJing2011]最小三角形 (分治)
分治就是了. 类似于分治找最近/远点对. CODE #include <bits/stdc++.h> using namespace std; const double eps = 1e- ...
随机推荐
- B树和B+树
当数据量大时,我们如果用二叉树来存储的会导致树的高度太高,从而造成磁盘IO过于频繁,进而导致查询效率下降.因此采用B树来解决大数据存储的问题,很多数据库中都是采用B树或者B+树来进行存储的.其目的就是 ...
- Linq的TakeWhile误用
where(func<>)返回符合条件的元素 与此相对的skipwhile跳过符合条件的,返回剩下的元素 容易误用的takewhile,与where 不一样,只有当所有元素满足条件时,才返 ...
- 50ms延时程序
12MHz晶振 一个机器周期2us, DEL: MOV R7,#200D DEL1: MOV R6,#125 DEL2: DJNZ R6,DEL2 ;125*2=250us DJNZ R7,DE ...
- Java的反射机制(Reflection)
反射机制 指可以在运动时加载.探知.使用编译期间完全未知的类 程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个已加载的类,都能够获取这个类的属性和方法:对于任意一个对象可以调用它的任意一个 ...
- springMVC之web.xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
- vmware 虚拟机克隆之后配IP重启网络失败
在日常实验中,我新安装了一个虚拟机(全新的)node1,然后为了实验,又克隆了一天虚拟机node2 然后我给两台机器设置IP和主机名node1 : 192.168.220.128 node2 : 1 ...
- 创建mysql 存储过程
CREATE PROCEDURE `test_insert_stu`() BEGIN DECLARE num INT; SET num = 0; WHILE (num<10) DO insert ...
- SpringTest框架JUnit单元测试用例获取ApplicationContext实例的方法
步骤 1.继承AbstractJUnit4SpringContextTests 2.引入ApplicationContext 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- 【UOJ #20】【NOIP 2014】解方程
http://uoj.ac/problem/20 并不会做...然后看题解....... 对a取模,避免了高精度带来的复杂度,然后再枚举x判断是否满足模意义下等于0. 取5个模数,我直接抄的别人的_( ...
- 【BZOJ 3050】【USACO2013 Jan】Seating 线段树
线段树维护4个标记, 昨天互测时题意理解错了,今天上午才发现. #include<cstdio> #include<cstring> #include<algorithm ...