杂题 [Tjoi 2013]松鼠聚会
来源:互联网 发布:电脑开单软件 编辑:程序博客网 时间:2024/04/27 12:20
问题 F: [Tjoi 2013]松鼠聚会
时间限制: 1 Sec 内存限制: 128 MB
提交: 70 解决: 35
[提交][状态][讨论版]
题目描述
有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1。现在N个松鼠要走到一个松鼠家去,求走过的最短距离。
输入
第一行给出数字N,表示有多少只小松鼠。0<=N<=10^5
下面N行,每行给出x,y表示其家的坐标。
-10^9<=x,y<=10^9
输出
表示为了聚会走的路程和最小为多少。
样例输入
6
-4 -1
-1 -2
2 -4
0 2
0 3
5 -2
样例输出
20
题目中要求的是切比雪夫距离,但这个太麻烦了。其实切比雪夫距离是可以转化成曼哈顿距离的,切比雪夫距离公式:S=max(ax-bx,ay-by)等于(ax+ay,ax-ay)和(bx+by,bx-by)两点的曼哈顿距离。想要证明只要把那个曼哈顿距离求出来化简即可。
那么就容易了,搞一个前缀和,二分出做减法的边界,扫一遍就行了。
#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#include<iostream>#define N 100005#define inf 1000000000#define ll long longstruct node{int x,y;}a[N];int n,mn=inf,mx=-inf,bx[N],by[N];ll ans=inf*10000000ll,sumx[N],sumy[N];using namespace std;int main(){ scanf("%d",&n);int x,y; for(int i=1;i<=n;i++) { scanf("%d%d",&x,&y); a[i].x=x+y,a[i].y=x-y; bx[i]=a[i].x;by[i]=a[i].y; } sort(bx+1,bx+n+1); sort(by+1,by+n+1); for(int i=1;i<=n;i++) sumx[i]=sumx[i-1]+bx[i],sumy[i]=sumy[i-1]+by[i]; for(int i=1;i<=n;i++) { ll h=0;ll l; l=lower_bound(bx+1,bx+n+1,a[i].x)-bx; h+=(l*2-n)*a[i].x*1ll-sumx[l]*2+sumx[n]; l=lower_bound(by+1,by+n+1,a[i].y)-by; h+=(l*2-n)*a[i].y*1ll-sumy[l]*2+sumy[n]; if(h<ans)ans=h; } printf("%lld\n",ans/2);}
阅读全文
0 0
- 杂题 [Tjoi 2013]松鼠聚会
- [BZOJ3170] [Tjoi 2013]松鼠聚会
- 3170: [Tjoi 2013]松鼠聚会
- BZOJ3170: [Tjoi 2013]松鼠聚会
- 3170: [Tjoi 2013]松鼠聚会
- 【bzoj3170】[Tjoi 2013]松鼠聚会
- 3170: [Tjoi 2013]松鼠聚会 (中位数)
- BZOJ 3170: [Tjoi 2013]松鼠聚会
- BZOJ 3170 [Tjoi 2013]松鼠聚会
- BZOJ P3170: [Tjoi 2013]松鼠聚会
- bzoj 3170: [Tjoi 2013]松鼠聚会
- bzoj 3170: [Tjoi 2013]松鼠聚会
- BZOJ 3170([Tjoi 2013]松鼠聚会-Manhattan距离单点最近)
- BZOJ 3170([Tjoi 2013]松鼠聚会-Manhattan距离单点最近)
- BZOJ 3170 Tjoi 2013 松鼠聚会 计算几何
- bzoj 3170: [Tjoi 2013]松鼠聚会 计算几何
- BZOJ 3170 TJOI 2013 松鼠聚会 切比雪夫距离
- BZOJ 3170: [Tjoi 2013]松鼠聚会(切比雪夫距离)
- wampserver下升级php7
- 微擎模块机制分析
- phantomJS利用cookie实现自动登录
- 几句话浅谈算法
- 实验吧解题笔记——编程(五)
- 杂题 [Tjoi 2013]松鼠聚会
- SharedPreferences极致封装——可能是全网最简单的封装了
- Java 多态、内部类、异常、包
- Linux学习修改ip
- JVM的内存区域划分
- 如何使用代码调用API接口发送短信?(以SendCloud为例)
- RecyclerView添加头部和尾部
- Android Binder机制
- 利用python下载网页上的文件