背景

雍正帝胤祯,生于康熙十七年(1678)是康熙的第四子。康熙61年,45岁的胤祯继承帝位,在位13年,死于圆明园。庙号世宗。

胤祯是在康乾盛世前期--康熙末年社会出现停滞的形式下登上历史舞台的。复杂的社会矛盾,为胤祯提供了施展抱负和才干的机会。他有步骤地进行了多项重大改革,高瞻远瞩,又惟日孜孜,励精图治,十三年中取得了卓有成效的业绩,为后代的乾隆打下了扎实雄厚的基础,使“康乾盛世”在乾隆时期达到了顶峰。他的历史地位,同乃父康熙和乃子乾隆相比,毫不逊色。尽管他猜忌多疑,刻薄寡恩,统治严酷,但比起他的业绩来,毕竟是次要的。

描述

话说雍正为了实施促进城市间沟通的政策,他计划在所有的大城市里挑选两个城市,在两个城市之间修建一条运河,这条运河要求是笔直的,以加强这两个城市的经济往来。但雍正希望这条运河长度越短越好,他请来了宰相和大学士帮他解决这个问题——到底挑哪两个大城市,在其间建造运河,使得其长度最小,最小为多少?可是经过长时间的计算和判断,仍然没有得出结果。此时,雍正想到了当初为康熙解决难题的你,是如此的智慧,如此的聪明绝顶。他亲自来到茅厕,找到了你(你当时已然是一个扫厕所的了),希望你能帮他解决这个问题,必定“厚”谢。你欣然答应了。

雍正将大致的情况告诉了你,并且说:大清一共有n个大城市,所有的大城市都不在同一个地点,同时我们对这n个城市从1到n进行编号;对于一个城市k,他有两个属性,一个是Xk,一个是Yk,分别表示这个城市所处的经度和纬度。请你告诉他问题的结果:L,即运河长度。(你可以假定地球是平面的)

格式

输入格式

第1行,一个整数n。

从第2行到n+1行,按照i从小到大顺序,每行两个整数Xi,Yi,代表编号为i的城市的经度和纬度。

其中2<=n <=100000,1<=Xi,Yi<2^31。

输出格式

一个实数L(保留三位小数)。

样例1

样例输入1

2

1 1

2 2

样例输出1

1.414

题解

这是一道求“平面最近点对”的模板题,平面最近点对使用分治的方法可以实现O(NlogN)的时间复杂度。

代码:

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 101000;
#define inf 1e10
struct Point
{
double x, y;
};
Point p[maxn];
int n;
double getDistance(Point a, Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
bool cmp(Point a, Point b)
{
return a.x < b.x || a.x == b.x && a.y < b.y;
}
double getDistance(int L, int R)
{
if (L >= R)
return inf;
if (L + 1 == R)
return getDistance(p[L], p[R]);
int M = (L + R) / 2;
double d = min(getDistance(L, M), getDistance(M+1, R));
for (int i = M; i >= L; i --)
{
for (int j = M+1; j <= R && p[j].x - p[i].x < d; j ++)
{
double tmp = getDistance(p[i], p[j]);
if (tmp < d)
d = tmp;
}
}
return d;
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++)
{
scanf("%lf%lf", &p[i].x, &p[i].y);
}
sort(p, p+n, cmp);
double ans = getDistance(0, n-1);
printf("%.3lf\n", ans);
return 0;
}

Vijos 1012 清帝之惑之雍正 平面最近点对(分治)的更多相关文章

  1. 【枚举】Vijos P1012 清帝之惑之雍正

    题目链接: https://vijos.org/p/1012 题目大意: 给n个坐标(n<=100 000),求直线距离最短是多少.数据较大用long long 或 double 题目思路: [ ...

  2. vijos P1009清帝之惑之康熙

    </pre>背景康熙是中国历史乃至世界历史中最伟大的帝王之一,清除螯拜,撤除三藩,统一台湾,平定准葛尔叛乱:与此同时,出众的他也被世界各国遣清使臣所折服.康熙是历史上少有的全人,不仅文武兼 ...

  3. 【动态规划】Vijos P1011 清帝之惑之顺治

    题目链接: https://vijos.org/p/1011 题目大意: 给一张N*M的地图(N,M<=500),可从任一点开始沿上下左右走,只能走比当前低的地方.问最长能走多少格. 题目思路: ...

  4. 【高精度】Vijos P1010 清帝之惑之乾隆

    题目链接: https://vijos.org/p/1010 题目大意: 多组数据,求R的n次幂(R为不超过9999.9的小数 n<=200)R保证占6位 不输出前导0和后缀0,整数就只输出整数 ...

  5. 【扩展欧几里德】Vijos P1009 清帝之惑之康熙

    题目链接: https://vijos.org/p/1009 题目大意: 两个人,一个在坐标x,每天走m,一个在坐标y,每天走n,坐标长L,问几天后碰面. 题目思路: [扩展欧几里德] 根据同余方程的 ...

  6. Vijos 1010 清帝之惑之乾隆

    背景 乾隆,雍正的第四子,在位60年,退位后又当了三年太上皇,终年89岁. 乾隆即位之初,实行宽猛互济的政策,务实足国,重视农桑,停止捐纳,平定叛乱等一系列活动中,充分体现了他的文治武功,乾隆帝向慕风 ...

  7. Vijos 1011 清帝之惑之顺治 记忆录式的动态规划(记忆化搜索)

    背景 顺治帝福临,是清朝入关后的第一位皇帝.他是皇太极的第九子,生于崇德三年(1638)崇德八年八月二ten+six日在沈阳即位,改元顺治,在位18年.卒于顺治十八年(1661),终24岁. 顺治即位 ...

  8. vijos 1011 清帝之惑之顺治

    背景 顺治帝福临,是清朝入关后的第一位皇帝.他是皇太极的第九子,生于崇德三年(1638)崇德八年八月二ten+six日在沈阳即位,改元顺治,在位18年.卒于顺治十八年(1661),终24岁. 顺治即位 ...

  9. Vijos 1040 高精度乘法

    描述 高精度乘法 输入:两行,每行表示一个非负整数(不超过10000位) 输出:两数的乘积. 样例1 样例输入1 99 101 样例输出1 9999 题解 这道题和之前的Vijos 1010 清帝之惑 ...

随机推荐

  1. StringTokenizer使用笔记

    StringTokenizer 基本使用 笔者最近在做算数表达式的逆波兰式转换和解析,原始表达式为String类型,在使用StringTokenizer 之前笔者的解决思路是 将原始表达式->转 ...

  2. PHP中的运算符

    一.算术运算符   运算符 名称 描述 实例 结果 x + y 加 x 和 y 的和 2 + 2 4 x - y 减 x 和 y 的差 5 - 2 3 x * y 乘 x 和 y 的积 5 * 2 1 ...

  3. 开发一个Servlet示例

    Servlet响应请求步骤: Servlet是一个基于Java技术的Web组件,运行在服务器端,用户利用Servlet可以很轻松地扩展Web服务器的功能,使其满足特定的应用需要.Tomcat是一个常用 ...

  4. swfit - 实现类似今日头条顶部标签和底部内容的动态解决方案

    TYPageView TYPageView 类似今日头条 的标签导航解决方案,支持多种样式选择,基于swift3.0,支持文字颜色动态变化,底部选中线的动态变化 配图: 使用方法: let title ...

  5. Adobe Fireworks CS6 Mac破解版

    Mac下一款快速建站的软件--Adobe Fireworks CS6,小子这里有时间就分享出来给更多需要的朋友. Adobe Fireworks CS6能让您在弹指间创作精美的网站和移动应用程序设计, ...

  6. Java计算1-100的和(要求尽量考虑代码优化)

    1.递归算法 public static void main(String[] args) { System.out.println(add(1)); } private static int add ...

  7. Python爬虫02——贴吧图片爬虫V2.0

    Python小爬虫——贴吧图片爬虫V2.0 贴吧图片爬虫进阶:在上次的第一个小爬虫过后,用了几次发现每爬一个帖子,都要自己手动输入帖子链接,WTF这程序简直反人类!不行了不行了得改进改进. 思路: 贴 ...

  8. Windows、Office系列产品精华部分集锦

    提示 有了这个帖子麻麻再也不用担心我因为四处找Microsoft家的软件和系统而四处劳累所烦恼了! 首先,你们最爱的老XP同志,XP同志虽然退休了,但是依然坚持在岗位上,向他致敬!! Windows ...

  9. 数据库连接之SQL JDBC

    数据库连接之SQL JDBC SQlServer的配置: 1).外围配置服务器中将远程连接设置为:同时使用TCP/IP和named pipes 2).点击该连接->属性->安全性-> ...

  10. MQ产品比较-ActiveMQ-RocketMQ

    几种MQ产品说明: ZeroMQ :  扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的重新封装,如果我们做为消息队列使用,需要开发大量的代码 RabbitMQ :结合erla ...