题目描述

给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的

输入输出格式

输入格式:

第一行:n;2≤n≤200000

接下来n行:每行两个实数:x y,表示一个点的行坐标和列坐标,中间用一个空格隔开。

输出格式:

仅一行,一个实数,表示最短距离,精确到小数点后面4位。

输入输出样例

输入样例#1:
复制

3
1 1
1 2
2 2
输出样例#1: 复制

1.0000

说明

0<=x,y<=10^9

题解

考场清晰的记得以前听过,并且记错做法还觉得自己是天才......

考场思路:按横轴排序,然后从左往右枚举每个点,把和该点的横坐标之差小于$ans$的点暴力算。

然后怕构造数据被卡(很多个点的横坐标差不多,竖轴差很多的话可以卡成$N$方),于是考虑用权值线段树优化竖轴,也就是从权值线段树中取竖轴在当前点加减ans范围的点暴力算。(考试$x,y$范围1e6)

这样应该就不会T了......

然后毒瘤评测人只给64M啊!哪里够开权值线段树啊!

于是把扫描线转了45°(也可以理解为把纸转45°),再做类暴力,这样就不好卡了。

然后就过了2333

 /*
qwerta
P1429 平面最近点对(加强版)
Accepted
100
代码 C++,1.16KB
提交时间 2018-10-19 15:55:35
耗时/内存
348ms, 2064KB
*/
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define R register
inline int read()
{
char ch=getchar();
int x=;
while(!isdigit(ch))ch=getchar();
while(isdigit(ch)){x=x*+ch-'';ch=getchar();}
return x;
}
const int MAXN=+,MAXX=+;
struct emm{
int x,y;
}a[MAXN];
const double k=-0.5;
bool cmp(emm qaq,emm qwq)
{
return qaq.y-k*qaq.x<qwq.y-k*qwq.x;
}
inline double dis(int u,int v)
{
return sqrt(1LL*(a[u].x-a[v].x)*(a[u].x-a[v].x)+1LL*(a[u].y-a[v].y)*(a[u].y-a[v].y));
}
double gen2=sqrt();
inline double je(int u,int v)
{
return abs(((a[u].y-k*a[u].x)-(a[v].y-k*a[v].x)))/gen2;
}
int main()
{
//freopen("dark.in","r",stdin);
//freopen("dark.out","w",stdout);
int n=read();
for(R int i=;i<=n;++i)
a[i].x=read(),a[i].y=read();
sort(a+,a+n+,cmp);
int l=,r=;
double ans=dis(,);
for(R int u=;u<=n;++u)
{
while(je(u,l)>ans)++l;
while(je(r+,u)<ans&&r<n)++r;
//cout<<u<<" "<<l<<" "<<r<<endl;
for(R int v=l;v<=r;++v)
if(u!=v)
ans=min(ans,dis(u,v));
}
printf("%.4f",ans);
return ;
}

「LuoguP1429」 平面最近点对(加强版)的更多相关文章

  1. P1429 平面最近点对[加强版] 随机化

    LINK:平面最近点对 加强版 有一种分治的做法 因为按照x排序分治再按y排序 可以证明每次一个只会和周边的六个点进行更新. 好像不算很难 这里给出一种随机化的做法. 前置知识是旋转坐标系 即以某个点 ...

  2. Luogu P1429 平面最近点对(加强版)(分治)

    P1429 平面最近点对(加强版) 题意 题目描述 给定平面上\(n\)个点,找出其中的一对点的距离,使得在这\(n\)个点的所有点对中,该距离为所有点对中最小的. 输入输出格式 输入格式: 第一行: ...

  3. P1429 平面最近点对(加强版)(分治)

    P1429 平面最近点对(加强版) 主要思路: 分治,将点按横坐标为第1关键字升序排列,纵坐标为第2关键字升序排列,进入左半边和右半边进行分治. 设d为左右半边的最小点对值.然后以mid这个点为中心, ...

  4. [Luogu1429]平面最近点对(加强版)

    题目大意: 平面最近点对. 思路: 分治. 首先将所有点排序 每次把当前区间分为两半,递归求解两个区间内部的情况,然后枚举区间两边的点. #include<cmath> #include& ...

  5. 「CF85E」 Guard Towers

    「CF85E」 Guard Towers 模拟赛考了这题的加强版 然后我因为初值问题直接炸飞 题目大意: 给你二维平面上的 \(n\) 个整点,你需要将它们平均分成两组,使得每组内任意两点间的曼哈顿距 ...

  6. 「Luogu4321」随机游走

    「Luogu4321」随机游走 题目描述 有一张 \(n\) 个点 \(m\) 条边的无向图,\(Q\) 组询问,每次询问给出一个出发点和一个点集 \(S\) ,求从出发点出发随机游走走遍这个点集的期 ...

  7. [LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC

    [LOJ#6437][BZOJ5373]「PKUSC2018」PKUSC 试题描述 九条可怜是一个爱玩游戏的女孩子. 最近她在玩一个无双割草类的游戏,平面上有 \(n\) 个敌人,每一个敌人的坐标为 ...

  8. 「USACO16OPEN」「LuoguP3147」262144(区间dp

    P3147 [USACO16OPEN]262144 题目描述 Bessie likes downloading games to play on her cell phone, even though ...

  9. 零元学Expression Design 4 - Chapter 7 使用内建功能「Clone」来达成Path的影分身之术

    原文:零元学Expression Design 4 - Chapter 7 使用内建功能「Clone」来达成Path的影分身之术 本章所介绍的是便利且快速的内建工具Clone ? 本章所介绍的是便利且 ...

随机推荐

  1. tf树

    tf变换(1)   TF库的目的是实现系统中任一个点在所有坐标系之间的坐标变换,也就是说,只要给定一个坐标系下的一个点的坐标,就能获得这个点在其他坐标系的坐标. 使用tf功能包,a. 监听tf变换:  ...

  2. Android - 单例模式(singleton)的使用

    单例模式(singleton)的使用 本文地址:http://blog.csdn.net/caroline_wendy 单例(singleton)是特殊的Java类,在创建实例时.一个类仅同意创建一个 ...

  3. mysql忘记password

    有时候突然忘记MySQL的password会真的不爽,这里介绍一种MySQLpassword忘记时重置password的方法,操作系统win8,MySql version:5.6.10 1 在任务管理 ...

  4. CocoaPods安装教程 pod setup很慢解决方案

    CocoaPods安装教程 pod setup很慢解决方案 http://www.jianshu.com/p/6230eec137f6

  5. Mysql 5.7.18 利用 MySQL proxies_priv(模拟角色)实现类似用户组管理

    利用 MySQL proxies_priv(模拟角色)实现类似用户组管理 角色(Role)可以用来批量管理用户,同一个角色下的用户,拥有相同的权限. MySQL5.7.X以后可以模拟角色(Role)的 ...

  6. 【WPF学习笔记】之如何点击“新建”按钮,在面板中加载一条条的“用户控件”的信息:动画系列之(四)

    ...... 承接上一系列动画三. 在主界面后台代码设置嵌套第二个用户控件. using System; using System.Collections.Generic; using System. ...

  7. c# 根据枚举Value 获得名称

    // 定义枚举类型enum sotype : int { book=1, pen=2, other=3 } // 输出名称 switch (Enum.GetName(typeof(sotype), 1 ...

  8. 在ios中使用单例模式编程

    本文转载至 http://blog.csdn.net/remote_roamer/article/details/7107007     1.    @implementation Singleton ...

  9. python之Matplotlib 和Numpy

    1.matplotlib http://www.cnblogs.com/TensorSense/p/6802280.html https://wenku.baidu.com/view/e1c15c9d ...

  10. Android笔记之Retrofit与RxJava的组合

    依赖 implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.retrofit2:con ...