Luogu4423 BJWC2011 最小三角形 平面最近点对
题意:给出$N$个点,求其中周长最小的三角形(共线的也计算在内)。$N \leq 2 \times 10^5$
这道题唤起了我对平面最近点对的依稀记忆
考虑平面最近点对的分治,将分界线两边的求解改为求三角形的最小边长即可。
小心坐标乘积爆int
不难但就是想不出
//This code is written by Itst
#include<bits/stdc++.h>
#define int long long
#define ld long double
#define eps (ld)1e-10
using namespace std;
inline int read(){
;
;
char c = getchar();
while(c != EOF && !isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(c != EOF && isdigit(c)){
a = (a << ) + (a << ) + (c ^ ');
c = getchar();
}
return f ? -a : a;
}
;
struct node{
int x , y;
}now[MAXN] , pot[MAXN];
int N;
ld dis(node a , node b){
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
ld len(node a , node b , node c){
return dis(a , b) + dis(b , c) + dis(a , c);
}
bool cmp1(node a , node b){
return a.y < b.y;
}
ld solve(int l , int r){
){
ld minN = 0x3f3f3f3f;
for(int i = l ; i <= r ; i++)
; j <= r ; j++)
; k <= r ; k++)
minN = min(minN , len(now[i] , now[j] , now[k]));
return minN;
}
;
ld k = (now[mid].x + now[mid + ].x) * (ld) , r) , d = min(d1 , d2);
sort(now + l , now + r + , cmp1);
;
for(int i = l ; i <= r ; i++)
if(fabs(now[i].x - k) + eps < d)
pot[++p] = now[i];
; i <= p ; i++)
; j <= p && pot[j].y - pot[i].y + eps < d ; j++)
; k <= p && pot[k].y - pot[i].y + eps < d ; k++)
d = min(d , len(pot[i] , pot[j] , pot[k]));
return d;
}
bool cmp(node a , node b){
return a.x < b.x;
}
signed main(){
#ifdef LG
freopen("4423.in" , "r" , stdin);
//freopen("4423.out" , "w" , stdout);
#endif
N = read();
; i <= N ; i++){
now[i].x = read();
now[i].y = read();
}
sort(now + , now + N + , cmp);
cout << ) << solve( , N);
;
}
Luogu4423 BJWC2011 最小三角形 平面最近点对的更多相关文章
- [BJWC2011]最小三角形(分治+最近点对)
题面:BJWC2011 最小三角形 \(solution:\) 昨天才学完平面最近点对,今天就要求平面最近的三个点,显然不是巧合. 仔细一思考,我们用来求平面最近点对的方法不就可以用到三个点上吗? 就 ...
- BZOJ 2458 最小三角形 | 平面分治
BZOJ 2458 最小三角形 题面 一个平面上有很多点,求他们中的点组成的周长最小的三角形的周长. 题解 跟平面最近点对差不多,也是先把区间内的点按x坐标从中间分开,递归处理,然后再处理横跨中线的三 ...
- BZOJ 2458: [BeiJing2011]最小三角形 | 平面分治
题目: 给出若干个点 求三个点构成的周长最小的三角形的周长(我们认为共线的三点也算三角形) 题解: 可以参考平面最近点对的做法 只不过合并的时候改成枚举三个点更新周长最小值,其他的和最近点对大同小异 ...
- [BJWC2011]最小三角形
嘟嘟嘟 这一看就是平面分治的题,所以就想办法往这上面去靠. 关键就是到\(mid\)点的限制距离是什么.就是对于当前区间,所有小于这个距离的点都选出来,参与更新最优解. 假设从左右区间中得到的最优解是 ...
- BZOJ2458 Beijing2011最小三角形(分治)
类似于平面最近点对,考虑分治,即分别计算分割线两侧的最小三角形再考虑跨过线的三角形. 复杂度证明也是类似的,对于某一个点,在另一侧可能与其构成最小三角形的点在一个d*d/2的矩形内(两边之和大于第三边 ...
- [BZOJ2458][BeiJing2011]最小三角形(分治)
求平面上n个点组成的周长最小的三角形. 回忆平面最近点对的做法,找到横坐标的中点mid分治到两边,合并时考虑离mid横坐标不超过当前最小值d的所有点,按y排序后暴力更新答案. 这个题也一样,先分治到两 ...
- 分治 - 计算几何 - BZOJ2458,[BeiJing2011]最小三角形
http://www.lydsy.com/JudgeOnline/problem.php?id=2458 [BeiJing2011]最小三角形 描述 Frisk现在遇到了一个有趣的问题. 平面上有N个 ...
- Vijos 1012 清帝之惑之雍正 平面最近点对(分治)
背景 雍正帝胤祯,生于康熙十七年(1678)是康熙的第四子.康熙61年,45岁的胤祯继承帝位,在位13年,死于圆明园.庙号世宗. 胤祯是在康乾盛世前期--康熙末年社会出现停滞的形式下登上历史舞台的.复 ...
- Luogu 1429 平面最近点对 | 平面分治
Luogu 1429 平面最近点对 题目描述 给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的 输入输出格式 输入格式: 第一行:n:2≤n≤200000 ...
随机推荐
- 从零开始学习html(八)CSS选择器——上
一.什么是选择器? <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...
- SEIG Modbus 3.4 CVE-2013-0662 漏洞分析与利用
前言 Schneider Electric Modbus Serial Driver 会监听 27700 端口,程序在处理客户端发送的数据时会导致栈溢出. 测试环境: windows xp sp3 相 ...
- Retrofit 代理模式
https://blog.csdn.net/H176Nhx7/article/details/78139406
- Kotlin入门(11)江湖绝技之特殊函数
上一篇文章介绍了Kotlin对函数的输入参数所做的增强之处,其实函数这块Kotlin还有好些重大改进,集中体现在几类特殊函数,比如泛型函数.内联函数.扩展函数.尾递归函数.高阶函数等等,因此本篇文章就 ...
- Appium学习——安装appium Server
安装appium Server 下载地址:百度网盘的下载链接:https://pan.baidu.com/s/1pKMwdfX 下载后, AppiumForWindows.zip 进行解压,点击 ap ...
- [20180718]拷贝数据文件从dg库.txt
[20180718]拷贝数据文件从dg库.txt 1.测试环境:SCOTT@book> @ ver1PORT_STRING VERSION B ...
- C#检测本机是否联网
public class Net { [DllImport("wininet")] private extern static bool InternetGetConnectedS ...
- 视频截图Util
VideoToPicUtil.java package com.zhwy.util; import java.io.File; import java.util.ArrayList; impor ...
- SQL Server2008 4064错误
无法打开用户默认数据库,登录失败,其原因是登录帐户的默认数据库被删除. 解决办法是使用管理员帐户修改此登录帐户的默认数据库. 1.使用管理员帐号登入企业管理器,在"对象资源管理器& ...
- VS Code 快捷键使用小技巧
相关文档 官方文档(英文版):Documentation for Visual Studio Code 中文文档(未完成):GitHub - jeasonstudio/CN-VScode-Docs: ...