传送门

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

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

根据一些奇怪的套路,我们把坐标系变化,把 $(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. HDU6579 Operation

    题目链接 问题分析 区间求异或和最大,比较自然的想到了线性基.而每次求一个区间的线性基显然是行不通的.我们考虑在每个位置求出首位置到当前位置的线性基.同时我们要使线性基中高位的位置所选的数尽量靠后.这 ...

  2. POJ 1430 Binary Stirling Numbers (第二类斯特林数、组合计数)

    题目链接 http://poj.org/problem?id=1430 题解 qaq写了道水题-- 在模\(2\)意义下重写一下第二类Stirling数的递推式: \[S(n,m)=S(n-1,m-1 ...

  3. Vue Cli3工具中,配置目录别名,alias

  4. 全面解读php-面向对象

    一.类的自动载入 //类的自动载入我们使用 spl_autoload_register($autoload_function ).我们需要在不同的地方包含更多不同的类文件,只需要多写几个 $autol ...

  5. day8_文件操作及编码解码

    一.文件操作基本流程 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所 ...

  6. hdu5747 Aaronson 贪心

    Aaronson Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  7. 设置ubuntu14.04命令行启动

    编辑文件"/etc/default/grub",  把 GRUB_CMDLINE_LINUX_DEFAULT="quiet"  改成GRUB_CMDLINE_L ...

  8. Kotlin之定义函数

    java: int add (int m ,int n){ return m+n; } void process(int m){ Systrm.out.println(m); } kotlin: fu ...

  9. [VBA]去重汇总-2

    代码来源Excelhome,链接:http://club.excelhome.net/thread-1360829-1-1.html 存着,以后借鉴着用^-^ Sub 去重汇总() Dim arr, ...

  10. SpringMVC restful风格下载文件,文件后缀被截掉

    原文:https://blog.csdn.net/wisdomhealth/article/details/78400421 @RequestMapping("/file/{filename ...