BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离

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

分析:

这啥奇怪的距离表示啊。推了一下发现是max{ abs(x[i] - x[j]),abs(y[i] - y[j] }。然后就不会了。

看题姐:这个东西叫切比雪夫距离,可以和曼哈顿距离转化。

把坐标变成(x[i]-y[i])/2,(x[i]+y[i])/2,求一遍曼哈顿距离,展开再分类讨论一下发现和上面那个式子是等价的。

曼哈顿距离就好办了。可以对x轴y轴分别求前缀和。

快速求出任意一点到其他所有点的距离:x[i]*(i-1)-s[i-1]+s[n]-s[i]-(n-i)*x[i](s为前缀和。)

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 100050
#define LL long long
struct A{
int id,x,y;
}a[N];
int n;
LL xx[N],yy[N],ans,s[N];
bool cmp1(const A &g,const A &h){
return g.x<h.x;
}
bool cmp2(const A &g,const A &h){
return g.y<h.y;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
a[i].id=i;
scanf("%d%d",&a[i].x,&a[i].y);
int tmp=a[i].x;
a[i].x=a[i].x+a[i].y;
a[i].y=tmp-a[i].y;
}
sort(a+1,a+n+1,cmp1);
for(int i=1;i<=n;i++){
s[i]=s[i-1]+a[i].x;
}
for(int i=1;i<=n;i++){
xx[a[i].id]=1ll*a[i].x*(i-1)-s[i-1]+s[n]-s[i]-1ll*(n-i)*a[i].x;
}
sort(a+1,a+n+1,cmp2);
for(int i=1;i<=n;i++){
s[i]=s[i-1]+a[i].y;
}
LL ans=1ll<<60;
for(int i=1;i<=n;i++){
yy[a[i].id]=1ll*a[i].y*(i-1)-s[i-1]+s[n]-s[i]-1ll*(n-i)*a[i].y;
ans=min(ans,xx[a[i].id]+yy[a[i].id]);
}
printf("%lld\n",ans>>1);
}

BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和的更多相关文章

  1. LuoguP3964 [TJOI2013]松鼠聚会【切比雪夫距离/前缀和】

    题目传送门 前置知识:切比雪夫距离和曼哈顿距离的相互转化--自为风月马前卒 有了这个知识,我们便可以在读入松鼠的家的坐标时,先把他转化一下,然后把最后的总式化简,我们会得到一个充满后缀和以及前缀和的式 ...

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

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

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

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

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

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

  5. 【bzoj3170】[Tjoi2013]松鼠聚会

    3170: [Tjoi2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1670  Solved: 885[Submit][Statu ...

  6. BZOJ_3210_花神的浇花集会_切比雪夫距离

    BZOJ_3210_花神的浇花集会_切比雪夫距离 Description 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动. 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多 ...

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

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

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

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

  9. BZOJ.3170.[TJOI2013]松鼠聚会(切比雪夫距离转曼哈顿距离)

    题目链接 将原坐标系每个点的坐标\((x,y)\)变为\((x+y,x-y)\),则原坐标系中的曼哈顿距离等于新坐标系中的切比雪夫距离. 反过来,将原坐标系每个点的坐标\((x,y)\)变为\((\f ...

随机推荐

  1. 使用padding后内容超出父级元素

    解决方法:

  2. Idea(一) 安装与破解

    现在idea横行的时代,没用过idea都不好意思了,于是乎,我也下载感受下. 下载安装包和破解地址: 链接: https://pan.baidu.com/s/16OeiDw942JaPXKtc9Oz1 ...

  3. Jmeter 性能测试术语

    1.5 术语及缩写词 测试时间:一轮测试从开始到结束所使用的时间 并发线程数:测试时同时访问被测系统的线程数.注意,由于测试过程中,每个线程都是以尽可能快的速度发请求,与实际用户的使用有极大差别,所以 ...

  4. php插入mysql中文数据出现乱码

    $con = mysqli_connect(DB_HOST, DB_USER, DB_PWD, $dbname) or die('数据库连接失败'); mysqli_set_charset($con, ...

  5. 我写的python代码的规则

    1.Python文件的命名: 采用每个单词的首字母大写,不使用下划线 2.Python类的命名: 采用每个单词的首字母大写,不使用下划线 3.Python包名的命名:采用每个单词都是小写,不使用下划线 ...

  6. hadoop环境运行程序出现 Retrying connect to server 问题

    程序运行时出现如下问题: 从网上查资料,有说重启format的..有说/etc/hosts出问题的... 反正都试了一遍..还是有这个问题 后来看日志,发现问题是访问服务器9001端口访问不到..开始 ...

  7. 部署网站: 配置项目到iis上运行报目录错误

    配置项目到iis上运行报目录错误 以下三种方法可使用: 1.添加文件访问权限 everyone  (线上环境慎用) 2.重新注册iis 3.web.config 加一段话 在<system.we ...

  8. thinkphp实现数据分页

    方法一: public function show_cate(){ $category_name = array( '1' => '政法综治前沿', '2' => '政策法规', '3' ...

  9. 【多线程】-ThreadPool线程池

    ThreadPool介绍: Thread类是一个静态类,所有不存在实例化构造函数操作,直接可以调用其内所存在的方法. 微软官网给出的解释: 提供一个线程池,该线程池可用于执行任务.发送工作项.处理异步 ...

  10. Caffe 编译后 make runtest 出现locale::facet::_S_create_c_locale 错误

    You might need to append LC_ALL="en_US.UTF-8" to file: /etc/default/locale and reboot your ...