传送门

首先题意就是求一个点到所有其他点的切比雪夫距离和最小

考虑枚举所有点作为答案,那么我们需要快速计算切比雪夫距离和,发现不太好算

根据一些奇怪的套路,我们把坐标系变化,把 $(x,y)$ 变成 $(\frac {x+y} {2} , \frac {x-y} {2} )$

这样搞以后,原本坐标系的切比雪夫距离就变成了新坐标系的曼哈顿距离

求一群点到一个点 $(x',y')$ 的曼哈顿距离可以把距离分成 $x,y$ 考虑,

对于 $x$,所有 $x$ 小于 $x'$ 的点对答案的贡献是 $(x'-x)$ ,大于 $x'$ 的点对答案的贡献是 $(x-x')$

把 $x,x'$ 分开,然后对于小于 $x'$ 的点可以直接前缀和优化求 $\sum-x$ ,最后加上 $\sum x'$

大于 $x'$ 的也是同理,$y$ 的情况也是同理

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=2e5+;
const ll INF=1e18;
int n;
ll x[N],y[N],bx[N],by[N],sx[N],sy[N],ans=INF;
inline ll work(int x,int y)
{
ll res=;
int px=lower_bound(bx+,bx+n+,x)-bx;
int py=lower_bound(by+,by+n+,y)-by;
res+=1ll*x*px-sx[px]; res+=1ll*y*py-sy[py];
res+=sx[n]-sx[px]-1ll*x*(n-px);
res+=sy[n]-sy[py]-1ll*y*(n-py);
return res;
}
int main()
{
n=read(); int a,b;
for(int i=;i<=n;i++)
{
a=read(),b=read();
x[i]=a+b; y[i]=a-b;
bx[i]=x[i]; by[i]=y[i];
}
sort(bx+,bx+n+); sort(by+,by+n+);
for(int i=;i<=n;i++) sx[i]=sx[i-]+bx[i];
for(int i=;i<=n;i++) sy[i]=sy[i-]+by[i];
for(int i=;i<=n;i++)
ans=min(ans,work(x[i],y[i]));
printf("%lld\n",ans/);
}

P3964 [TJOI2013]松鼠聚会的更多相关文章

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

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

  2. 洛咕 P3964 [TJOI2013]松鼠聚会

    有个结论就是把坐标\((x,y)\)变形成\(((x+y)/2,(x-y)/2)\),切比雪夫距离就变成了曼哈顿距离. 所以变换一下坐标直接统计答案即可. // luogu-judger-enable ...

  3. 洛谷P3964 [TJOI2013]松鼠聚会(坐标系变换)

    题面 传送门 题解 对于两个点\((x_i,y_i)\)和\(x_j,y_j\),我们定义它们之间的曼哈顿距离为 \[|x_i-x_j|+|y_i-y_j|\] 定义它们的切比雪夫距离为 \[\max ...

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

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

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

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

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

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

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

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

  8. [TJOI2013]松鼠聚会 BZOJ 3170

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

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

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

随机推荐

  1. Python3学习笔记(十一):函数参数详解

    一.位置参数 根据参数的位置来传递参数,调用函数时,传递的参数顺序和个数必须和定义时完全一致 # 定义函数 def man(name, age): print("My name is %s, ...

  2. AtCoder AGC036C GP 2 (组合计数)

    题目链接 https://atcoder.jp/contests/agc036/tasks/agc036_c 题解 终于有时间补agc036的题了. 这题其实不难的来着--我太菜了考场上没想出来 首先 ...

  3. jmxtrans + influxdb + granafa 监控套件使用手册

    需求说明 随着大数据组件的日益完善,需要随时随地保持各个组件的日常运行,对各个组件的监控势在必行.为了减少运维部门的负担,通过筛选,我们使用 jmxtrans + influxdb + granafa ...

  4. git梳理

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 本地库管理命令 git init ...

  5. 分布式-网络通信-NIO

    目录:一.java NIO 和阻塞I/O的区别     1. 阻塞I/O通信模型     2. java NIO原理及通信模型二.java NIO服务端和客户端代码实现 一.java NIO 和阻塞I ...

  6. 《信息安全系统设计基础》--Myod

    Myod 回顾Makefile 任务详情 复习c文件处理内容 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能 main与其他分开,制作静态库和动态库 编写Mak ...

  7. oj.1677矩形嵌套,动态规划 ,贪心

    #include<iostream> #include<algorithm> #include<cstring> using namespace std; stru ...

  8. spark 2015 发展方向

    https://www.youtube.com/watch?v=YWppYPWznSQ    Databrick的spark 2015规划聚会的视频,看起来今年会在SQL和MLlib上发力多一点.   ...

  9. Vs2019+openjdk12 本地Debug环境搭建过程

    1. VS2019下载和安装 这个就不写了 2. cygwin安装: https://jingyan.baidu.com/article/455a99507c0b78a166277809.html 需 ...

  10. django写原生sql语句

    执行自定义SQL语言: from django.db import connection ​ cursor=connection.cursor() ​ # 插入操作 cursor.execute(&q ...