Hdu 4312-Meeting point-2——哈夫曼距离与切比雪夫距离
题意
从 $n$ 个点中选择一点,使得其他点到其的切比雪夫距离最小($0 < n \leq 1e5$).
分析
定理:$(x_1, y_1)$ 与 $(x_2, y_2)$ 的曼哈顿距离等于 $(x_1-y_1, x_1+y_1)$ 与 $(x_2-y_2, x_2+y_2)$ 的切比雪夫距离。
转换成曼哈顿距离中的坐标,求曼哈顿距离。
由于这个点必须是 $n$ 个点中的一点,所以 $x,y$ 还有限制关系(不然直接排序取中点就完事了)。
我们对分别对 $x,y$ 排序并求出前缀和,
然后枚举这 $n$ 个点,对于每个点,可以 $O(log n)$ 得到 $x$ 方向和 $y$ 方向的绝对值之和,两者相加即是答案。
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const ll INF = (1LL) << ;
const int maxn = 1e5 + ;
int n, x[maxn], y[maxn], sx[maxn], sy[maxn];;
ll sum_x[maxn], sum_y[maxn]; struct Node{
int x, y, id;
}p[maxn]; int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
for(int i = ;i <= n;i++)
{
int a, b;
scanf("%d%d", &a, &b);
x[i] = sx[i] = a+b; y[i] = sy[i] = b-a;; //为了保证为整数,扩大了两倍
}
sort(sx+, sx+n+);
sort(sy+, sy+n+);
for(int i = ;i <= n;i++)
{
sum_x[i] = sum_x[i-] + sx[i];
sum_y[i] = sum_y[i-] + sy[i];
} ll ans = INF;
for(int i = ;i <= n;i++) //枚举每个点
{
ll px = lower_bound(sx+, sx+n+, x[i]) - sx; //如果之前记录下来,就可以O(1)
ll py = lower_bound(sy+, sy+n+, y[i]) - sy;
ll tmp = px*x[i] - sum_x[px] + sum_x[n] - sum_x[px] - (n-px)*x[i]; //相乘爆int
tmp += py*y[i] - sum_y[py] + sum_y[n] - sum_y[py] - (n-py)*y[i];
if(tmp < ans) ans = tmp;
}
printf("%lld\n", ans/);
}
}
参考链接:https://www.cnblogs.com/SGCollin/p/9636955.html
Hdu 4312-Meeting point-2——哈夫曼距离与切比雪夫距离的更多相关文章
- hdu 2527 Safe Or Unsafe (哈夫曼树)
Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 4312 Meeting point-2(切比雪夫距离转曼哈顿距离)
http://acm.hdu.edu.cn/showproblem.php?pid=4312 题意:在上一题的基础上,由四个方向改为了八个方向. 思路: 引用自http://blog.csdn.net ...
- HDU 4311 Meeting point-1 && HDU 4312 Meeting point-2
这俩个题 题意::给出N(<1e5)个点求找到一个点作为聚会的地方,使每个点到达这里的距离最小.4311是 曼哈顿距离 4312是 切比雪夫距离: 曼哈顿距离 :大家都知道 对于二维坐标系a( ...
- HDU 4311 Meeting point-1 求一个点到其它点的曼哈顿距离之和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4311 解题报告:在一个平面上有 n 个点,求一个点到其它的 n 个点的距离之和最小是多少. 首先不得不 ...
- Hdu 4312-Meeting point-2 切比雪夫距离,曼哈顿距离,前缀和
题目: http://acm.hdu.edu.cn/showproblem.php?pid=4312 Meeting point-2 Time Limit: 2000/1000 MS (Java/Ot ...
- Hdu OJ 5884-Sort (2016 ACM/ICPC Asia Regional Qingdao Online)(二分+优化哈夫曼)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5884 题目大意:有n个有序的序列,对于第i个序列有ai个元素. 现在有一个程序每次能够归并k个序列, ...
- HDU 1053 & HDU 2527 哈夫曼编码
http://acm.hdu.edu.cn/showproblem.php?pid=1053 #include <iostream> #include <cstdio> #in ...
- 两个队列+k叉哈夫曼树 HDU 5884
// 两个队列+k叉哈夫曼树 HDU 5884 // camp题解: // 题意:nn个有序序列的归并排序.每次可以选择不超过kk个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过TT, ...
- 随手练——HDU Safe Or Unsafe (小根堆解决哈夫曼问题)
HDU 2527 :http://acm.hdu.edu.cn/showproblem.php?pid=2527 哈夫曼树,学完就忘得差不多了,题目的意思都没看懂,有时间复习下,看了别人的才知道是怎么 ...
随机推荐
- C之指针加减运算
法则:1.指针减指针,语法正确,结果得一个整型值,表示两数值之间的对象类型的空间距离,而不是对象之间的字节数差值 2.指针加指针,语法错误, 3.指针加整形值,语法正确,表示后移N个空间单位 ...
- 编程语言、Python介绍及其解释器安装、运行Python解释器的两种方式、变量、内存管理
一.编程语言介绍 1.1 机器语言:直接用计算机能理解的二进制指令来编写程序,直接控制硬件. 1.2 汇编语言:在机器语言的基础上,用英文标签取代二进制指令来编写程序,本质上也是直接控制硬件. 以上2 ...
- 计算机网络自顶向下方法第4章 网络层:数据平面 (Network layer)
4.1 网络层概述 网络层主要功能为转发(将数据从路由器输入接口转移到合适的输出接口)和路由选择(端到端的路径选择),每台路由器都有一张转发表,用最长前缀匹配规则来转发. 4.1.1 转发和路由选择 ...
- linux终端提示符修改
Linux主机名莫名其妙的由@myhostname变成了@bogon了之后 1.在linux下添加一个127.0.0.2名叫bogon的主机此方法使用后,bogon主机名得以解析,使用的主机名仍为bo ...
- C++中的构造函数与析构函数及组合类的调用
// 构造函数与析构函数及类的组合 #include "stdafx.h"#include <iostream>using namespace std; //枚举enu ...
- QQ、微信 唯一登陆设计
唯一登陆设计指一个账号可以在多个不同的客户端进行登陆,例如PC.Android.IOS等.每一个客户端就会生成一个对应的tokan,相当于生成三个token分别对应不同的客户端. 但是同一个客户端同时 ...
- java.lang.AbstractMethodError: null
在使用springcloud的时候运行报这个错,原因是版本冲突导致的,在idea中创建springcloud项目的时候,这里默认是${spring-cloud.version},但是如果你使用的是高版 ...
- 谷歌浏览器调用activex控件方法
原文转自 https://jingyan.baidu.com/article/af9f5a2d0ebe5543140a4596.html activex是由微软开发,所以在支持上,目前原生态支持的只有 ...
- Hadoop Local(本地)模式搭建
1. 下载压缩包 2. 配置环境变量 3. 配置Hadoop的JAVA_HOME路径 4. WordCount 1. 下载压缩包 下载Hadoop binary二进制压缩包 https://hadoo ...
- extjs layout 最灵活的页面布局样式
当你在页面布局的时候,遇到页面元素较多,不知如何完美布局... 可以试试下面这个类型,万能布局类型. var panel = new Ext.Panel({ renderTo:Ext.getBody( ...