【bzoj3170】[Tjoi 2013]松鼠聚会 旋转坐标系
题目描述
有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
题解
旋转坐标系
题目给出的切比雪夫距离不好求,我们可以旋转坐标系,将点$(x,y)$变为$(x+y,x-y)$,转化为曼哈顿距离。
然后就可以对横纵坐标分开考虑,对于某一坐标我们要求的就是所有数与它差的绝对值之和。可以对所有数排序,然后二分查找,使用前缀和计算答案。
最后别忘了把答案除2,因为旋转坐标系的过程中相当于把距离乘了2。
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 100010
using namespace std;
typedef long long ll;
ll x[N] , y[N] , tx[N] , ty[N] , sx[N] , sy[N];
int main()
{
int n , i , px , py;
ll ans = 1ll << 62 , vx , vy;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ ) scanf("%lld%lld" , &vx , &vy) , x[i] = tx[i] = vx + vy , y[i] = ty[i] = vx - vy;
sort(tx + 1 , tx + n + 1) , sort(ty + 1 , ty + n + 1);
for(i = 1 ; i <= n ; i ++ ) sx[i] = sx[i - 1] + tx[i] , sy[i] = sy[i - 1] + ty[i];
for(i = 1 ; i <= n ; i ++ )
{
px = lower_bound(tx + 1 , tx + n + 1 , x[i]) - tx , vx = (x[i] * px - sx[px]) + (sx[n] - sx[px] - x[i] * (n - px));
py = lower_bound(ty + 1 , ty + n + 1 , y[i]) - ty , vy = (y[i] * py - sy[py]) + (sy[n] - sy[py] - y[i] * (n - py));
ans = min(ans , vx + vy);
}
printf("%lld\n" , ans >> 1);
return 0;
}
【bzoj3170】[Tjoi 2013]松鼠聚会 旋转坐标系的更多相关文章
- BZOJ3170: [Tjoi 2013]松鼠聚会
3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 531 Solved: 249[Submit][Statu ...
- bzoj-3170 3170: [Tjoi 2013]松鼠聚会(计算几何)
题目链接: 3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec Memory Limit: 128 MB Description 有N个小松鼠,它们的家用一个点x,y表 ...
- Bzoj 3170[Tjoi 2013]松鼠聚会 曼哈顿距离与切比雪夫距离
3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1318 Solved: 664[Submit][Stat ...
- 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 ...
- [Tjoi 2013]松鼠聚会
3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1318 Solved: 664[Submit][Stat ...
- bzoj 3170: [Tjoi 2013]松鼠聚会
#include<cstdio> #include<iostream> #include<algorithm> #define M 100008 using nam ...
- bzoj 3170 Tjoi 2013 松鼠聚会 曼哈顿距离&&切比雪夫距离
因为曼哈顿距离很好求,所以要把每个点的坐标转换一下. 转自:http://blog.csdn.net/slongle_amazing/article/details/50911504 题解 两个点的切 ...
- 3170: [Tjoi 2013]松鼠聚会
题目大意 给定n个点,找到一个点使这个点到其他所有点的切比雪夫距离之和最小. 题解 我们知道切比雪夫距离和曼哈顿距离的转化公式 \(1\)表示切比雪夫距离,\(2\)表示曼哈顿距离 我们有: \(x_ ...
随机推荐
- IT的学习部落(持续更新)
1.易百教程 - 专注于IT教程和实例 http://www.yiibai.com/ 2.站长特效 - js特效 http://www.zzjs.net/ 3.酷站-享受编程和技术所 ...
- UVA 246 10-20-30 10-20-30游戏 模拟+STL双端队列deque
Input Each input set consists of a sequence of 52 integers separated by spaces and/or ends of line. ...
- cv2.Canny 边缘检测
Canny边缘检测 Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是: 好的检测 - 算法能够尽可能多地标识出图像中的实际边缘. 好的定位 - 标识出的边缘要尽可能与实际图像中 ...
- oracle 数据导到 sql server
方法一: navicate:用法比较简单,选择工具-数据传输就可以了.目前测试了下暂时没遇到什么问题. 方法二: Microsoft SQL Server Migration Assistant 8. ...
- linux - mysql 安装教程
环境介绍>>>>>>>>>>>>>>>>>> 操作系统:Centos 7 mysql数据库版 ...
- iOS 资源大全整理
这是个精心编排的列表,它包含了优秀的 iOS 框架.库.教程.XCode 插件.组件等等. 这个列表分为以下几个部分:框架( Frameworks ).组件( Components ).测试( Tes ...
- Keras预训练模型下载后保存路径
https://blog.csdn.net/xiaohuihui1994/article/details/83340080
- vue使用原生js实现滚动页面跟踪导航高亮
需要使用vue做一个专题页面. 滚动页面指定区域导航高亮. BetterScroll:可能是目前最好用的移动端滚动插件 如何自定义CSS滚动条的样式? 监听滚动页面事件,对比当前页面的位置与元素的位置 ...
- 【markdown】 markdown 语法
介绍几个 markdown 语法学习地址和相关工具 参考链接 coding gitlab markdown offical markdown editor markdown editor2
- (转)可简化iOS 应用程序开发的6个Xcode小技巧
Xcode是iPhone和iPad开发者用来编码或者开发iOS app的IDE.Xcode有很多小巧但很有用的功能,很多时候我们可能没有注意到它们,也或者我们没有在合适的水平使用这些功能简化我们的iO ...