BZOJ3170:[TJOI2013]松鼠聚会
题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=3170
通过分析可以发现,题目所说的两点之间的距离就是切比雪夫距离。
两点之间欧几里得距离:\(\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}\)
两点之间曼哈顿距离:\(|x_1-x_2|+|y_1+y_2|\)
两点之间切比雪夫距离:\(max(|x1-x2|,|y1-y2|)\)
曼哈顿距离转切比雪夫距离:\((x,y)--->(x+y,x-y)\)
切比雪夫距离转曼哈顿距离:\((x,y)--->(\frac{x+y}{2},\frac{x-y}{2})\)
由于一个点到多个点的曼哈顿距离可以通过前缀和后缀和\(O(1)\)求,而切比雪夫只能\(O(n)\)求,所以我们这题只需要把坐标转化一下求曼哈顿距离即可。为了避免\(double\),转坐标的时候不除二,最后答案再除二。
时间复杂度:\(O(nlogn)\)
空间复杂度:\(O(n)\)
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
int n;ll res=1e18;
ll sum_pre[maxn],sum_suf[maxn],ans[maxn];
int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
struct point {
int x,y,id;
}p[maxn];
bool cmp_x(point a,point b) {return a.x<b.x;}
bool cmp_y(point a,point b) {return a.y<b.y;}
int main() {
n=read();
for(int i=1;i<=n;i++) {
int x=read(),y=read();
p[i].x=x+y,p[i].y=x-y;
p[i].id=i;
}
sort(p+1,p+n+1,cmp_x);
for(int i=n;i;i--)
sum_suf[i]=sum_suf[i+1]+p[i].x;
for(int i=1;i<=n;i++) {
sum_pre[i]=sum_pre[i-1]+p[i].x;
if(i!=1)ans[p[i].id]=1ll*p[i].x*(i-1)-sum_pre[i-1];
if(i!=n)ans[p[i].id]+=sum_suf[i+1]-1ll*p[i].x*(n-i);
}
sort(p+1,p+n+1,cmp_y);
for(int i=n;i;i--)
sum_suf[i]=sum_suf[i+1]+p[i].y;
for(int i=1;i<=n;i++) {
sum_pre[i]=sum_pre[i-1]+p[i].y;
if(i!=1)ans[p[i].id]+=1ll*p[i].y*(i-1)-sum_pre[i-1];
if(i!=n)ans[p[i].id]+=sum_suf[i+1]-1ll*p[i].y*(n-i);
res=min(res,ans[p[i].id]>>1);
}
printf("%lld\n",res);
return 0;
}
BZOJ3170:[TJOI2013]松鼠聚会的更多相关文章
- BZOJ3170: [Tjoi2013]松鼠聚会(切比雪夫距离转曼哈顿距离)
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1524 Solved: 803[Submit][Status][Discuss] Descripti ...
- BZOJ3170 [Tjoi2013]松鼠聚会 切比雪夫距离 - 曼哈顿距离 - 前缀和
BZOJ3170 题意: 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最 ...
- BZOJ3170: [Tjoi2013]松鼠聚会 - 暴力
描述 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离. 题解 简直 ...
- BZOJ3170: [Tjoi2013]松鼠聚会
[传送门:BZOJ3170] 简要题意: 给出n个点的坐标,规定两个点的距离=max(|x1-x2|,|y1-y2|) 要求选出一个点,使得这个点到所有点的距离和最小 题解: 切比雪夫转换例题 将一个 ...
- Bzoj3170: [Tjoi2013]松鼠聚会 (切比雪夫距离)
题目链接 显然,题目要求我们求切比雪夫距离,不会的可以去看一下attack的博客. 考虑枚举所有的点 转换为曼哈顿距离后. 那么对于这个点的路程和是. \[\sum_{i=1}^n | x_i - x ...
- 【bzoj3170】[Tjoi2013]松鼠聚会
3170: [Tjoi2013]松鼠聚会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1670 Solved: 885[Submit][Statu ...
- BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和
BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和 题意:有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点, ...
- [TJOI2013]松鼠聚会 曼哈顿距离
[TJOI2013]松鼠聚会 luogu P3964 首先容易得到两点间距离是\(max(|x_1-x_2|, |y_1-y_2|)\)(即切比雪夫距离) 然后有个套路:原\((x,y)\)求曼哈顿距 ...
- [TJOI2013]松鼠聚会(枚举)
[TJOI2013]松鼠聚会 题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x, ...
- 洛谷P3964 [TJOI2013]松鼠聚会 [二分答案,前缀和,切比雪夫距离]
题目传送门 松鼠聚会 题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示, ...
随机推荐
- Linux基本命令 vim命令(一)
vim的三种工作模式 命令模式.输入模式和编辑模式的相互转换,如图 命令模式:使用 Vim 编辑文件时,默认处于命令模式.在此模式下,可以使用上.下.左.右键或者 k.j.h.l 命令进行光标移动,还 ...
- Docker容器技术-命令进阶
一.基本命令 1.Docker布尔型选项 使用某选项但没有提供参数,等同于把选项设置为true,要改变它的值,唯一的方法是将其设置成false. 找出一个选项的默认值是true还是false: [ro ...
- 适配iOS9问题汇总
iOS 9适配过程中出现的问题,收集的链接资料供大家学习分享. http://wiki.mob.com/ios9-对sharesdk的影响(适配ios-9必读)/ http://www.cocoach ...
- Centos7.4 Nginx反向代理+负载均衡配置
Ningx是一款高性能的HTTP和反向代理服务器,配置起来也比较简单. 测试环境: 172.16.65.190 Nginx-反向代理 172.16.65.191 Ningx-Web 172.16.65 ...
- spark总结3
cd 到hadoop中 然后格式化 进入到 bin下 找到 hdfs 然后看看里面有哈参数: ./hdfs namenode -format 格式化 然后启动 sbin/start-d ...
- Android深度探索(卷1)HAL与驱动开发 虚拟环境的安装
前言: 最近在看<Android深度探索(卷1)HAL与驱动开发>安装随书带的虚拟环境浪费了很多时间,说是虚拟环境的安装倒不如说是虚拟环境的导入,其实没什么技术含量,也没有什么复杂的,只是 ...
- web.xml里报错:Multiple annotations found at this line:
在web.xml 中添加错误页面配置,出现了这个报错 具体情况是这样的: 错误信息: Multiple annotations found at this line: - cvc-complex-ty ...
- codeforces707C:Pythagorean Triples
Description Katya studies in a fifth grade. Recently her class studied right triangles and the Pytha ...
- network namespace连接的4种方法及性能
veth pair # add the namespaces ip netns add ns1 ip netns add ns2 # create the veth pair ip link add ...
- js装饰者模式
装饰者模式是为已有的功能动态地添加更多功能的一种方式.当系统需要新功能的时候,是向旧的类中添加新的代码.这些新加的代码通常装饰了原有类的核心职责或主要行为,在主类中加入了新的字段,新的方法和新的逻辑, ...