题解:切比雪夫距离转化为曼哈顿距离

枚举源点,横纵坐标互不影响,分开考虑,前缀和优化

横纵分开考虑是一种解题思路

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long Lint;
const int maxn=100009; Lint ans=1000000000000000000LL;
int n;
int px[maxn],py[maxn]; int a[maxn];
Lint sa[maxn][2]; int b[maxn];
Lint sb[maxn][2]; int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
int x,y;
scanf("%d%d",&x,&y);
px[i]=x+y;
py[i]=x-y;
a[i]=x+y;
b[i]=x-y;
}
sort(a+1,a+1+n);
sort(b+1,b+1+n); for(int i=1;i<=n;++i){
sa[i][0]=sa[i-1][0]+a[i]-a[1];
sb[i][0]=sb[i-1][0]+b[i]-b[1];
}
for(int i=n;i>=1;--i){
sa[i][1]=sa[i+1][1]+a[n]-a[i];
sb[i][1]=sb[i+1][1]+b[n]-b[i];
} for(int i=1;i<=n;++i){
int pa=lower_bound(a+1,a+1+n,px[i])-a;
int pb=lower_bound(b+1,b+1+n,py[i])-b;
Lint tm=0;
tm+=(sa[1][1]-sa[pa][1])-1LL*(a[n]-a[pa])*(pa-1);
tm+=(sa[n][0]-sa[pa][0])-1LL*(a[pa]-a[1])*(n-pa);
tm+=(sb[1][1]-sb[pb][1])-1LL*(b[n]-b[pb])*(pb-1);
tm+=(sb[n][0]-sb[pb][0])-1LL*(b[pb]-b[1])*(n-pb);
ans=min(ans,tm);
} printf("%lld\n",ans/2);
return 0;
}

  

BZOJ 3170 [Tjoi2013]松鼠聚会的更多相关文章

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

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

  2. 3170: [Tjoi2013]松鼠聚会

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1804  Solved: 968[Submit][Status][Discuss] Descript ...

  3. BZOJ - 3170: 松鼠聚会 (切比雪夫转曼哈顿距离)

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

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

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

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

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

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

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

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

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

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

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

  9. [TJOI2013]松鼠聚会 BZOJ 3170

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

随机推荐

  1. vux 中 this.$vux.loading undefined 的问题

    时间:2018-04-03 摘要:this.$vux.loading 报 undefined 今天在使用 事件触发 vux 的 loading  组件时,发现无法触发成功,显示 undefined 然 ...

  2. uboot前传

    1.uboot到底是干嘛的 uboot主要作用是用来启动操作系统内核. uboot还要负责部署整个计算机系统. uboot中还有操作Flash等板子上硬盘的驱动. uboot还得提供一个命令行界面供人 ...

  3. linux 下office软件推荐

    概述 最近想使用LINUX下搭建服务器,所以查找一些需要用的软件. linux下最好的office解决办法 其实因为我是不怎么使用office的,我也不知道不同office有什么不一样,直到有一次写奖 ...

  4. 011.CI4框架CodeIgniter, 获取查看用户的IP地址和浏览器信息

    01.PHP CI4框架CodeIgniter中有Request 类,是用来读取各种用户的数据,其中获取IP地址的代码如下: <?php namespace App\Controllers; c ...

  5. 026、MySQL取字符串左边,取字符串右边,取字符串中间,取文本开始位置

    #取文本左边 ); #田 ); #田攀 ); #田攀5 #取文本右边 ); # ); # ); #攀52 #取文本中间 '); #田攀 '); #攀5 #从字符串s中获取s1的开始位置 不忘初心,如果 ...

  6. Git删除无效远程分支

    当远程分支删除的时候,本地同步下来的远程分支却不会删除,久而久之,本地积累了不少无效的远程分支.找了一下,可以用如下命令清除它们: git remote update -p

  7. 图片与byte相互转换

    一.图片转byte public byte[] ImageToByte() { string imagefile = @"http://192.168.0.212/pass/T-1.jpg& ...

  8. ACM-生化武器

    Description在一个封闭的房间里,gogo给大家表演了他的屁遁术,人果然一下没影了,但是他留下的“生化武器”,却以每秒1米的速度向上下左右扩散出去.为了知道自己会不会被“毒”到,你果断写了个算 ...

  9. 从零到Django大牛的的进阶之路01

    搭建 创建虚拟环境 mkvirtualenv django_py3_1.11 -p python3 安装Django pip install django==1.11.11 创建工程 django-a ...

  10. Codeforces Round #618 (Div. 2) 小号上紫之路

    这一场涨了不少,题也比较偏思维,正好适合我 A. Non-zero 我们记录这些数字的总和sum,并且记录0的个数zero,显然答案应该是这些0的个数,注意如果sum+zero==0的话答案要额外加一 ...