背景

雍正帝胤祯,生于康熙十七年(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. struts2.1.6教程十、类型转换

    建立struts2conversion项目,并搭建好struts2的基本开发环境 1.基于Action的直接属性转换 建立t.jsp页面,内容如下: <s:form action="p ...

  2. jquery和vue对比

    1.jquery介绍:想必大家都用过jquery吧,这个曾经也是现在依然最流行的web前端js库,可是现在无论是国内还是国外他的使用率正在渐渐被其他的js库所代替,随着浏览器厂商对HTML5规范统一遵 ...

  3. JS中Node节点总结

    Node的三个基本属性: 1.nodeType:表明节点类型,1是元素节点,3是文本节点. 2.nodeName:  表明节点名称,元素节点为标签名,文本节点为#text. 3.nodeValue:表 ...

  4. sql还原(.bak文件还原)

    第一步: 右键“数据库”,选择“还原数据库” 第二步: 选择“设备”,然后选择“…” 第三步: 添加备份文件(这里使用MyDB.bak) 第四步: 勾选“还原”复选框,进度显示“已完成” 第五步: 最 ...

  5. 两强相争,鹿死谁手 — JQuery中的Ajax与AngularJS中的$http

    一.JQuery与AngularJS 首先,先简单的了解一下JQuery与AngularJS.从源头上来说,两者都属于原生JS所封装成的库,两种为平行关系. 二.Ajax请求与数据遍历打印 这里是Aj ...

  6. JavaSE教程-02Java基本语法

    1.注释 什么是注释 用于解释说明程序作用的文字 Java中注释分类格式 单行注释 格式: //注释文字 多行注释 格式: /* 注释文字 */ 文档注释 格式:/* 注释文字 / 2.关键字 什么是 ...

  7. sublime 新手代码提示

    有提示的    你按   table   试试这就是按过的结果   是不是很方便这是按后的效果      是不是很方便 下面是各种简写效果html <html></html> ...

  8. Android之自定义Adapter的ListView

    ListView的创建,一般要具备两大元素: 1)数据集,即要映射的字符串.图片信息之类. 2)适配器,实现把要映射的字符串.图片信息映射成视图(如Textview.Image等组件),再添加到Lis ...

  9. Vue爬坑之vuex初识

    在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用  props 或者 $emit 等方式 http://www.cnblogs.com/wisewrong/p/62660 ...

  10. 【iOS】UIDynamicAnimator动画

    创建动画 UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; 协议代理 ...