求平面上n个点组成的周长最小的三角形. 回忆平面最近点对的做法,找到横坐标的中点mid分治到两边,合并时考虑离mid横坐标不超过当前最小值d的所有点,按y排序后暴力更新答案. 这个题也一样,先分治到两边,然后取出所有离mid横坐标不超过当前最小值/2的点,按y排序后选择三个总坐标不超过当前最小值/2的点更新答案. 按y排序在递归上来时归并,复杂度O(nlogn). #include<cmath> #include<cstdio> #include<cstring> #i…
题目链接:bzoj2458: [BeiJing2011]最小三角形 学习推荐博客:分治法编程问题之最接近点对问题的算法分析 题解:先将所有点按x值排列,然后每次将当前区间[l,r]分成左右两半递归求解周长最小三角形.考虑到两半区间之间可能有连成最小三角形的情况,设dd为两半区间中最小三角形周长的最小值,筛选满足要求的点(x值与中点坐标x值的距离小于dd),然后按y值排序,进而暴搜出周长最小三角形. #include<cstdio> #include<cmath> #include&…
http://www.lydsy.com/JudgeOnline/problem.php?id=2458 [BeiJing2011]最小三角形 描述 Frisk现在遇到了一个有趣的问题. 平面上有N个点,Frisk想找出周长最小的三角形. 由于点非常多,分布也非常乱,所以Frisk想请你来解决这个问题. 为了减小问题的难度,这里的三角形也包括共线的三点. 输入 第一行包含一个整数N表示点的个数. 接下来N行每行有两个整数,表示这个点的坐标. 输出 输出只有一行,包含一个6位小数,为周长最短的三角…
类似于平面最近点对,考虑分治,即分别计算分割线两侧的最小三角形再考虑跨过线的三角形. 复杂度证明也是类似的,对于某一个点,在另一侧可能与其构成最小三角形的点在一个d*d/2的矩形内(两边之和大于第三边),并且这些点所组成的三角形周长均不小于d.然而并不清楚这里至多会有多少个点,vfk曾说上界是16,我当然不会证明这个上界也构造不出来有这么多点的方案.找这些点的时候归并就可以做到线性.那么复杂度是O(nlogn)乘上枚举这些点的常数2*16*15/2,看起来根本跑不动不过这个上界肯定是特别松的所以…
类似分治最近点对的方法乱搞一下就行. #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){…
分治就是了. 类似于分治找最近/远点对. CODE #include <bits/stdc++.h> using namespace std; const double eps = 1e-13; const int MAXN = 200005; const double INF = 1e15; #define sqr(x) ((x)*(x)) struct Point { double x, y; Point(){} Point(double x, double y):x(x), y(y){}…
题目链接: 2458: [BeiJing2011]最小三角形 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1101  Solved: 380 Description Xaviera现在遇到了一个有趣的问题.平面上有N个点,Xaviera想找出周长最小的三角形.由于点非常多,分布也非常乱,所以Xaviera想请你来解决这个问题.为了减小问题的难度,这里的三角形也包括共线的三点. Input 第一行包含一个整数N表示点的个数.接下来N行每行有两个整…
[前言]话说好久没有写题解了.到暑假了反而忙.o(╯□╰)o [原题] 2458: [BeiJing2011]最小三角形 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 574  Solved: 177 [id=2458" style="color:blue; text-decoration:none">Submit][Status] Description Xaviera如今遇到了一个有趣的问题. 平面上有N个点.Xa…
题目: 给出若干个点 求三个点构成的周长最小的三角形的周长(我们认为共线的三点也算三角形) 题解: 可以参考平面最近点对的做法 只不过合并的时候改成枚举三个点更新周长最小值,其他的和最近点对大同小异 2#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #define N 200010 #define INF 1e20 using namespace std; int…
题目大意:给出平面上n个点,求最小的由这些点组成的三角形的周长.(N<=200,000) 思路:点按x坐标排序后分治,每次取出与排在中间的点的横坐标相差不超当前答案一半的点,按y坐标排序后再暴力枚举y坐标相差不超过当前答案一半的三个点统计答案,复杂度O(能过)(听说期望nlogn). #include<cstdio> #include<cmath> #include<algorithm> using namespace std; inline int read()…