【BZOJ】【3170】【TJOI2103】松鼠聚会
切比雪夫距离+曼哈顿距离
题解:http://www.cnblogs.com/zyfzyf/p/4105456.html
其实应该先做这题再做【BZOJ】【3210】花神的浇花集会的吧……
我们发现dist(i,j)是 i 和 j 的切比雪夫距离,那么同样的,我们可以将它们转成曼哈顿来做。(x[i]=x+y; y[i]=x-y;)
然后就是求n个点到某一个点的曼哈顿距离和的最小值了。
由于是曼哈顿距离,所以x和y是无关的,我们可以分开计算!
对x排序,我们可以发现,所有点到x[1]的距离就是$\sum_{i=2}^n (x[i]-x[1])=\sum_{i=2}^n x[i] - x[1]*(n-1)$
我们发现求和的哪一项$\sum_{i=2}^n x[i]$其实就是后缀和。
同理,到x[2]的也是跟前缀和&后缀和有关,那么就可以O(n)来扫一遍来做了……
y方向同理……也是正着扫一遍,倒着扫一遍。
/**************************************************************
Problem: 3170
User: Tunix
Language: C++
Result: Accepted
Time:424 ms
Memory:2840 kb
****************************************************************/ //BZOJ 3170
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
#define pb push_back
using namespace std;
typedef long long LL;
inline int getint(){
int r=,v=; char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if (ch=='-') r=-;
for(; isdigit(ch);ch=getchar()) v=v*-''+ch;
return r*v;
}
const int N=1e5+;
/*******************template********************/ int n;
struct node{
int x,y; LL z;
}a[N];
inline bool cmp1(node a,node b){return a.x<b.x;}
inline bool cmp2(node a,node b){return a.y<b.y;}
int main(){
#ifndef ONLINE_JUDGE
freopen("3170.in","r",stdin);
freopen("3170.out","w",stdout);
#endif
n=getint();
F(i,,n){
int x=getint(),y=getint();
a[i].x=x+y; a[i].y=x-y;
}
sort(a+,a+n+,cmp1);
LL sum=;
F(i,,n){
a[i].z+=(LL)a[i].x*(i-)-sum;
sum+=a[i].x;
}
sum=;
D(i,n,){
a[i].z+=sum-(LL)a[i].x*(n-i);
sum+=a[i].x;
}
sort(a+,a+n+,cmp2);
sum=;
F(i,,n){
a[i].z+=(LL)a[i].y*(i-)-sum;
sum+=a[i].y;
}
sum=;
D(i,n,){
a[i].z+=sum-(LL)a[i].y*(n-i);
sum+=a[i].y;
}
LL ans=1e18;
F(i,,n) ans=min(ans,a[i].z);
printf("%lld\n",ans>>);
return ;
}
3170: [Tjoi 2013]松鼠聚会
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 720 Solved: 326
[Submit][Status][Discuss]
Description
有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1。现在N个松鼠要走到一个松鼠家去,求走过的最短距离。
Input
第一行给出数字N,表示有多少只小松鼠。0<=N<=10^5
下面N行,每行给出x,y表示其家的坐标。
-10^9<=x,y<=10^9
Output
表示为了聚会走的路程和最小为多少。
Sample Input
-4 -1
-1 -2
2 -4
0 2
0 3
5 -2
Sample Output
HINT
Source
【BZOJ】【3170】【TJOI2103】松鼠聚会的更多相关文章
- BZOJ - 3170: 松鼠聚会 (切比雪夫转曼哈顿距离)
pro: 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离.0&l ...
- BZOJ.3170.[TJOI2013]松鼠聚会(切比雪夫距离转曼哈顿距离)
题目链接 将原坐标系每个点的坐标\((x,y)\)变为\((x+y,x-y)\),则原坐标系中的曼哈顿距离等于新坐标系中的切比雪夫距离. 反过来,将原坐标系每个点的坐标\((x,y)\)变为\((\f ...
- BZOJ 3170 [Tjoi2013]松鼠聚会
题解:切比雪夫距离转化为曼哈顿距离 枚举源点,横纵坐标互不影响,分开考虑,前缀和优化 横纵分开考虑是一种解题思路 #include<iostream> #include<cstdio ...
- 3170: [Tjoi2013]松鼠聚会
Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1804 Solved: 968[Submit][Status][Discuss] Descript ...
- 【bzoj3170】[Tjoi2013]松鼠聚会
3170: [Tjoi2013]松鼠聚会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1670 Solved: 885[Submit][Statu ...
- BZOJ 3170: [Tjoi 2013]松鼠聚会 切比雪夫距离
3170: [Tjoi 2013]松鼠聚会 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 3170: [Tjoi 2013]松鼠聚会( sort )
题目的距离为max(|x1-x2|, |y1-y2|) (切比雪夫距离). 切比雪夫距离(x, y)->曼哈顿距离((x+y)/2, (x-y)/2) (曼哈顿(x, y)->切比雪夫(x ...
- Bzoj 3170[Tjoi 2013]松鼠聚会 曼哈顿距离与切比雪夫距离
3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1318 Solved: 664[Submit][Stat ...
- [BZOJ 3170] 松鼠聚会
Link: BZOJ 3170 传送门 Solution: $Knowledge Point:$ 切比雪夫距离$DIST(a,b)=max\{ |X'_a-X'_b|,|Y'_a-Y'_b|\}$ 曼 ...
随机推荐
- 修改linux系统编码
方法1: vi /etc/sysconfig/i18n 默认为: LANG="en_US.UTF-8"SYSFONT="latarcyrheb-sun16" ...
- ref:Mysql授权远程登陆
ref:https://blog.csdn.net/qq_26710805/article/details/79776897 在Windows环境上操作.步骤如下: 1. 打开cmd窗口,登陆mysq ...
- eclipse中运行 main 方法报错,找不到类
eclipse (maven 项目)中运行 main 方法报错,找不到类 ** 发现:在 eclipse中的 "Marker" 控制面板中 ,发现问题所在 只要删除 maven 仓 ...
- 洛谷P2707 Facer帮父亲 [优先队列,数学]
题目传送门 Facer帮父亲 题目背景 Facer可是一个孝顺的孩纸呦 题目描述 Facer的父亲是一名经理,现在总是垂头丧气的. Facer问父亲,怎么啦?父亲说,公司出了点问题啊. 公司管理着N个 ...
- 跟厂长学PHP7内核(三):源码目录结构
上篇文章我们已经介绍了源码分析工具的安装.配置以及调试方法,本文我们来讲述一下PHP源码的目录结构. 一.目录概览 以php-7.0.12为例,看过源码的同学们应该发现源码目录多达十多个,下面是每个目 ...
- Java反射机制demo(四)—获取一个类的父类和实现的接口
Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 ...
- 洛谷——P2936 [USACO09JAN]全流Total Flow
题目描述 Farmer John always wants his cows to have enough water and thus has made a map of the N (1 < ...
- java异常及日志注意事项
一.异常注意事项 简单整理了下关于异常的规范: 1) 在异常处理模块中应提供精确.易读的错误原因信息. 2) 不要处理能够避免的异常. 3) 一个方法不应该抛出太多类型的 ...
- 20162327WJH使用队列:模拟票务站台代码分析
20162327WJH使用队列:模拟票务站台代码分析 用链队实现队列的情况 1.用链表实现队列的代码 关键方法代码及补全代(LinkedOueue类) public void enqueue(T el ...
- hdu 3068 Manacher算法
题意:求最长回文串,模板题 #include<cstdio> #include<iostream> #include<algorithm> #include< ...