3170: [Tjoi2013]松鼠聚会

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit:
1670  Solved: 885
[Submit][Status][Discuss]

Description

有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1。现在N个松鼠要走到一个松鼠家去,求走过的最短距离。

Input

第一行给出数字N,表示有多少只小松鼠。0<=N<=10^5
下面N行,每行给出x,y表示其家的坐标。
-10^9<=x,y<=10^9

Output

表示为了聚会走的路程和最小为多少。

Sample Input

6
-4 -1
-1 -2
2
-4
0 2
0 3
5 -2

Sample Output

20

HINT

 

Source

 

[Submit][Status][Discuss]

题意:N个点,求某一个点到其他点的切比雪夫距离之和最小化;
题解:
        推荐一篇页面比较好讲得很清楚的博客:https://www.cnblogs.com/zwfymqz/p/8253530.html
        两个点(x1,y1) 和 (x2,y2)
        切比雪夫距离:max(|x1-x2|,|y1-y2|)
        曼哈顿距离:|x1-x2|+|y1-y2|
        先介绍绝对值的两个性质:|a|+|b| = max(|a+b|,|a-b|)  max(|a|,|b|) = |(a+b)/2|+|(a-b)/2|
        可以利用数轴理解一下;
        利用上面的性质可以知道:
        若:(x,y) – > (x-y,x+y) 则新图的切比雪夫距离为原图的曼哈顿距离;
        若:(x,y) – > ((x-y)/2,(x+y)/2) 则新图的曼哈顿距离为原图的切比雪夫距离;
        为什么要转化呢?
        切比雪夫不好处理,转化后对曼哈顿距离分x,y排序,预处理某个值到前面的曼哈顿距离之和,可以做到O(1)查询,此题直接枚举哪个点;
        另外如果最近的点不要求在这些点里面而是平面的任何一个点,分别贪心选取x坐标,y坐标的排序后的中位数,注意切比雪夫转曼哈顿,有可能不是整点,要求整点还需要特判一下;

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
#include<vector>
#include<stack>
#include<map>
#define Run(i,l,r) for(int i=l;i<=r;i++)
#define Don(i,l,r) for(int i=l;i>=r;i--)
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int N=;
int n,px[N],py[N];
ll upx[N],dnx[N],upy[N],dny[N];
struct data{
int x,id;
bool operator <(const data&A)const{
return x<A.x;
}
}X[N],Y[N];
int main(){
// freopen("bzoj3170.in","r",stdin);
// freopen("bzoj3170.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++){
int a,b;
scanf("%d%d",&a,&b);
X[i]=(data){a-b,i};
Y[i]=(data){a+b,i};
}
sort(X+,X+n+);
sort(Y+,Y+n+);
for(int i=;i<=n;i++){
px[X[i].id]=i;
py[Y[i].id]=i;
}
ll ans=1e18;
for(int i=;i<=n;i++){
upx[i]=upx[i-]+1ll*(i-)*(X[i].x-X[i-].x);
upy[i]=upy[i-]+1ll*(i-)*(Y[i].x-Y[i-].x);
}
for(int i=n;i;i--){
dnx[i]=dnx[i+]+1ll*(n-i)*(X[i+].x-X[i].x);
dny[i]=dny[i+]+1ll*(n-i)*(Y[i+].x-Y[i].x);
}
for(int i=;i<=n;i++){
ans=min(ans,upx[px[i]]+dnx[px[i]]+upy[py[i]]+dny[py[i]]);
}
printf("%lld\n",ans>>);
return ;
}//by tkys_Austin;
 

【bzoj3170】[Tjoi2013]松鼠聚会的更多相关文章

  1. BZOJ3170: [Tjoi2013]松鼠聚会(切比雪夫距离转曼哈顿距离)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1524  Solved: 803[Submit][Status][Discuss] Descripti ...

  2. BZOJ3170 [Tjoi2013]松鼠聚会 切比雪夫距离 - 曼哈顿距离 - 前缀和

    BZOJ3170 题意: 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最 ...

  3. BZOJ3170: [Tjoi2013]松鼠聚会 - 暴力

    描述 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离. 题解 简直 ...

  4. BZOJ3170: [Tjoi2013]松鼠聚会

    [传送门:BZOJ3170] 简要题意: 给出n个点的坐标,规定两个点的距离=max(|x1-x2|,|y1-y2|) 要求选出一个点,使得这个点到所有点的距离和最小 题解: 切比雪夫转换例题 将一个 ...

  5. Bzoj3170: [Tjoi2013]松鼠聚会 (切比雪夫距离)

    题目链接 显然,题目要求我们求切比雪夫距离,不会的可以去看一下attack的博客. 考虑枚举所有的点 转换为曼哈顿距离后. 那么对于这个点的路程和是. \[\sum_{i=1}^n | x_i - x ...

  6. BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和

    BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和 题意:有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点, ...

  7. [TJOI2013]松鼠聚会 曼哈顿距离

    [TJOI2013]松鼠聚会 luogu P3964 首先容易得到两点间距离是\(max(|x_1-x_2|, |y_1-y_2|)\)(即切比雪夫距离) 然后有个套路:原\((x,y)\)求曼哈顿距 ...

  8. [TJOI2013]松鼠聚会(枚举)

    [TJOI2013]松鼠聚会 题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x, ...

  9. 洛谷P3964 [TJOI2013]松鼠聚会 [二分答案,前缀和,切比雪夫距离]

    题目传送门 松鼠聚会 题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示, ...

随机推荐

  1. selenium webdriver API详解(三)

    本系列主要讲解webdriver常用的API使用方法(注意:使用前请确认环境是否安装成功,浏览器驱动是否与谷歌浏览器版本对应) 一:获取页面元素的文本内容:text 例:获取我的博客名字文本内容 代码 ...

  2. throttle(节流)和debounce(防抖)

    防抖和节流都是用来控制频繁调用的问题,但是这两种的应用场景是有区别的. throttle(节流) 有一个调用周期,在一个很长的时间里分为多段,每一段执行一次.例如onscroll,resize,500 ...

  3. 3星|《科技投资新时代》:TMT行业资讯汇编

    科技投资新时代:TMT投资方法.趋势与热点聚焦 全书共6章,前4章是一些投资与分析的基本方法与技巧,第5章集中讲通信行业的现状与趋势,第6章讲大数据.物联网.全面屏等TMT行业热点. 总体来说数据.信 ...

  4. 套接口socket编程(Client/Server编程实例)

    基本概念 套接口也就是网络中的ID.网络通信,归根到底还是进程间通信(不同计算机上的进程间的通信).在网络中,每一个节点(计算机或路由器)都有一个网络地址,也就是IP地址. IP地址:在网络中唯一标识 ...

  5. Adobe InDesign CS6自学入门到高级视频教程

    关键字:Adobe InDesign 视频教程 点击获取视频教程 教程目录 第1章/1.卸载InDesign CS6.avi 第1章/2.安装InDesign CS6.avi 第2章/1.创建并编辑自 ...

  6. loadrunner--基础2

    LR11-03 一.并发测试(n VU) 1.并发测试两个条件 1)脚本中要有 集合点(并发点) 2)控制台中要设置并发策略(选择第一项,所有虚拟用户到达集合点后释放) 集合点: 5个线程,代表5个V ...

  7. 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?(转)

    摘自https://blog.csdn.net/jiange_zh/article/details/50198097 在算法竞赛中,我们常常需要用到一个“无穷大”的值,对于我来说,大多数时间我会根据具 ...

  8. Android开发第二阶段(5)

    今天:对图片的替换修改,使整个app的图案化更美观. 明天:对Android的对sdcard的操作学习

  9. c语言学习—图书搜索

    请问下:你说的C四大圣经指那几本啊?——<C 陷阱与缺陷> && <C程序设计语言> && <C专家编程> && & ...

  10. Ubuntu中Google Chrome安装

    转载自博客 1. 方法一   1.在ubuntu中启动终端   2.在终端中,输入以下命令: sudo wget http://www.linuxidc.com/files/repo/google-c ...